AmazonのAPIをFlaskで使いたいです。
解決したいこと
python、flaskを使って作ったウェブサイトをレンタルサーバーxreaで試しに公開してみようとしています。
Amazon Product Advertising APIを送信して情報を取得するところでcan't start new threadというエラーが出てうまく動かないです。
threadもAmazonのSDKもよくわかってなくて、xreaの無料プランだからなのか、なんにかxreaの設定を変えるかアップグレードすればうまくいくのかなどがわかるとうれしいです。
ローカル環境?(自分のパソコンでset FLASK_APP=アプリ名→flaskrun)だとうまくいきます。
Flask、amazon-paapi5インストール済み
Hello表示済み
requestを使った楽天APIの情報取得と表示はできます。
発生している問題・エラー
amazon-paapi5をインストールしていて、入力されたキーワードを取得してAPIリクエストして結果を取得したいです。
エラーログです↓
2024-01-24 10:57:08,026 ERROR [MainThread] Exception on /search [GET]
Traceback (most recent call last):
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/flask/app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/flask/app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/virtual/アカウント名/public_html/サイト名/main.py", line 63, in search
amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_ID, COUNTRY )
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/amazon/paapi.py", line 130, in __init__
access_key=self.access_key, secret_key=self.secret_key, host=self.host, region=self.region
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/paapi5_python_sdk/api/default_api.py", line 55, in __init__
region = region)
File "/virtual/アカウント名/.local/lib/python3.6/site-packages/paapi5_python_sdk/api_client.py", line 89, in __init__
self.pool = ThreadPool()
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 789, in __init__
Pool.__init__(self, processes, initializer, initargs)
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 174, in __init__
self._repopulate_pool()
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 239, in _repopulate_pool
w.start()
File "/usr/lib64/python3.6/multiprocessing/dummy/__init__.py", line 48, in start
threading.Thread.start(self)
File "/usr/lib64/python3.6/threading.py", line 867, in start
_start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
pythonのファイルはこのような感じです。
### 該当するソースコード
```python
@app.route('/search', methods=['GET'])
def search():
query = request.args.get('query', '')
keyword = query
search_index = "カテゴリー名"
ACCESS_KEY = "アクセスキー"
SECRET_KEY = "シークレットキー"
ASSOCIATE_ID = "アソシエイトID "
COUNTRY = "JP"
amazon_api = AmazonAPI(ACCESS_KEY, SECRET_KEY, ASSOCIATE_ID, COUNTRY )
search_items = amazon_api.search_items(keywords=keyword, search_index=search_index)
return render_template('search.html', results=search_items)
自分で試したこと
APIのリクエストをprintするだけのpythonファイルを作って、ssh?(teraterm)から直接実行してみるとうまくいって結果を取得できました。