有人能告诉我Celery是在线程中还是在单独的子进程中执行任务?文档似乎没有解释它(读它3次)。如果它是一个线程,它如何通过GIL(特别是谁以及如何通知事件)?
你如何比较芹菜的异步与Twisted的反应堆模型?毕竟芹菜是否使用反应器模型?
谢谢,
答案 0 :(得分:4)
有人能告诉我Celery是在线程还是在线程中执行任务 单独的子进程?
这两项任务都不会在另一台机器上的单独进程中执行。它不是您称之为“延迟”的线程的子进程。 -C和-P选项控制工作进程如何管理自己的线程。工作进程通过一个完全独立的消息服务来获取任务。
你如何比较芹菜的异步与Twisted的反应堆模型?是 毕竟芹菜使用反应器模型?
Twisted是一个事件队列。它是异步的,但它不是为并行处理而设计的。
答案 1 :(得分:2)
-c和-P是芹菜工作者的并发相关选项。
-c CONCURRENCY, --concurrency=CONCURRENCY Number of child processes processing the queue. The default is the number of CPUs available on your system. -P POOL_CLS, --pool=POOL_CLS Pool implementation: processes (default), eventlet, gevent, solo or threads.
使用eventlet: http://docs.celeryproject.org/en/latest/userguide/concurrency/eventlet.html#enabling-eventlet
http://docs.celeryproject.org/en/latest/internals/reference/celery.concurrency.processes.html