uWSGI,Flask和Parallel执行块

时间:2015-02-07 01:09:45

标签: python flask uwsgi

我有一个用Flask编写的用Python编写的小API。它是围绕另一个API(我无法控制)的包装API。我需要提出几个请求,我想让它们并行。第一种方法是使用grequests,但令人费解的是uwsgi服务器被绞死并且没有响应。在向主进程发送HUP信号后重新加载工作程序需要一段时间。我使用的代码类似于:

urls = [
    'http://www.example.com', 
    'http://www.example.net',
]
urls = [grequests.get(x, hooks=dict(response=function_to_do_some_work))
        for url in urls]
grequests.map(urls) # <- here it hangs

我认为gevent / grequests存在问题所以我使用multiprocessing.Pool重新实现了解决方案,如下所示:

urls = [
    'http://www.example.com', 
    'http://www.example.net',
]
pool = multiprocessing.Pool(10)
pool.map(function_to_do_some_work, urls) # <- here it hangs

这里的问题不是在开发环境中完美运行的代码。问题在于uwsgi和Python执行模型,或者这些行之间的某种东西。我不知道从哪里开始寻找答案。我使用的模块版本是:

Python 2.7.5
grequests 0.2.0
Flask 0.10.1
uwsgi 2.0.9

在此执行环境下,我应该使用什么替代的并行执行来同时执行多个任务?

1 个答案:

答案 0 :(得分:3)

需要通过

在uwsgi上启用线程
enable-threads = True

nginx配置的完整示例,以及uwsgi,upstart,virtual-env参见

https://stackoverflow.com/a/27221427/567606