Hon*_*rek 25 python monkeypatching multiprocessing celery gevent
我想使用Celery作为我的任务的队列,所以我的网络应用程序可以排队任务,返回响应,同时/某天/任务将处理任务...我建立了一种API,所以我不知道将提供什么样的任务 - 将来,可以有处理HTTP请求的任务,另一个IO,以及CPU消耗任务.关于这一点,我想在进程上运行Celery的工作者,因为这些是Python中的通用类型的并行性.
但是,我也想在我的任务中使用gevent,所以我可以有一个任务产生许多HTTP请求,等等.问题是,当我这样做时:
from gevent import monkey
monkey.patch_all()
Run Code Online (Sandbox Code Playgroud)
芹菜停止工作.它开始,但没有任何任务可以有效排队 - 他们似乎去经纪人,但芹菜工人不收集它们并处理它们.只有开始和等待.如果我删除这些行并执行任务而没有任何gevent和并行化,一切正常.
我想这可能是因为gevent补丁也在线程化.所以我试过了
from gevent import monkey
monkey.patch_all(thread=False)
Run Code Online (Sandbox Code Playgroud)
...但是Celery甚至没有启动,它在没有给出原因的情况下崩溃(启用了日志记录的调试级别).
是否有可能使用Celery来排队任务和gevent在一个任务中做一些事情?怎么样?我做错了什么?
myu*_*uf3 20
我相信推荐的启动任务的方法如下.
python manage.py celery worker -P gevent --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)
Gevent需要尽早修补.
rem*_*ezx 10
您可以使用包含多个greenlet的多个线程来运行芹菜,如下所示:
$ celery multi start 4 -P gevent -l info -c:1-4 1000
Run Code Online (Sandbox Code Playgroud)