mm9pxz
@mm9pxz

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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)から直接実行してみるとうまくいって結果を取得できました。 

0

1Answer

xreaはApache2サーバーのレンタルサービスとおもいます。
wsgiモジュール(mod_wsgi)をApacheに組込むことが可能であればflaskはつかえるとおもいます。

python、flaskを使って作ったウェブサイトをレンタルサーバーxreaで試しに公開してみようとしています。

flaskにてHello表示は成功しているか?文書から読み取れません。
Amazon Product Advertising APIの前にflaskは動いていますか?

Hello表示済み

読み落としていました。

ローカル環境?(自分のパソコンでset FLASK_APP=アプリ名→flaskrun)だとうまくいきます。

flaskrunはApacheを使わないwsgiサーバーです。

xreaは標準提供のApache2以外、サーバーを建てられないのでは?

ssh?(teraterm)から直接実行してみるとうまくいって結果を取得できました。

xreaの制限シェルからpythonのクライアントとして成功しているなら、flaskからも成功するでしょう。

xreaの運営にメール等で任意にサーバーが建てられるか?flaskが使えるか?mod_wsgiをApacheに組込むことが可能か?確認して下さい。

0Like

Comments

  1. Hello表示済み

    読み落としていました。以下で検索すると、権限不十分、コンポーネントのバージョンの違いで発生するようです。

    RuntimeError: can't start new thread

    ssh?(teraterm)から直接実行

    Hello表示のコードにpython,pip,flask,amazon-paapi5のバージョン、Path,カレントディレクトリを表示して、ssh?(teraterm)と比較してはどうでしょう。

    IBMのサイトに次の解説が気になります

    スレッド開始許可 Instana Python トレーサーには、 Python threading.Timer オブジェクトを作成および開始する権限が必要です。

  2. @mm9pxz

    Questioner

    二度もありがとうございます。参考にさせていただきます。

Your answer might help someone💌