2017-02-28 5 views
1

私はcronジョブでマルチスレッドでAPIをリクエストしようとしています。私は、スレッドを要求しているのをやめたり、黙らせたりするように見えます。 pserveで問題はありません。私はuWSGIを使用したいが、私はいくつかの問題がある。マルチスレッドリクエスト.postをuWSGI、ピラミッドを使用して

import threading 
import requests 

def worker(settings): 
    lookup_url = settings['lookup_url'] 
    api_sid = settings['api_sid'] 
    auth_token = settings['auth_token'] 
    args = settings['args'] 
    resp = requests.post(lookup_url, 
         auth=(api_sid, auth_token), 
         data={'data': args}, 
         timeout=5.0, 
         ) 

def main(request): 
    registry = request.registry 
    settings = registry.settings 
    for _ in range(3): 
     threading.Thread(target=worker, args=(settings,)).start() 

私はどんな解決策を教えてください:

のPython 3.5.2

私のコードは次のようです。

答えて

1

UWSGIは、デフォルトではPythonのスレッドを有効にしません:

デフォルトでは、PythonのプラグインはGILを初期化しません。つまり、アプリケーション生成スレッドは実行されません。 スレッドが必要な場合は、enable-threadsで有効にするには を覚えておいてください。 uWSGIをマルチスレッドで実行すると、 モード(スレッドオプションを使用)では自動的にスレッド化が有効になります 。この "奇妙な"デフォルトの動作はパフォーマンス上の理由から、 には恥ずかしいことではありません。

http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html

+0

ありがとうございました。 私はこれを試しました、それは十分に良いようです。 >>> [uwsgi] enable-threads = true – terapyon

関連する問題