2017-02-28 33 views
1

我想通过cron作业来请求多线程中的API。我期待停止或放松请求的线程。 这是pserve没有问题。我想使用uWSGI但我有一些问题。多线程requests.post使用uWSGI,金字塔

的Python 3.5.2

我的代码是这样的:

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() 

请让我知道任何解决方案。

回答

1

UWSGI默认不启用Python的线程:

默认情况下,Python的插件不初始化GIL。这意味着 您的应用程序生成的线程将不会运行。如果您需要线程,请记住 使用启用线程启用它们。在多线程 模式下运行uWSGI(带有线程选项)将自动启用线程 支持。这种“奇怪的”默认行为是出于性能方面的原因, 在这方面毫不惭愧。

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

+0

太谢谢你了。 我试过了,看起来不错。 >>> [uwsgi] enable-threads = true – terapyon