是芹菜的apply_async线程还是进程?

时间:2013-08-19 06:09:51

标签: python celery

有人能告诉我Celery是在线程中还是在单独的子进程中执行任务?文档似乎没有解释它(读它3次)。如果它是一个线程,它如何通过GIL(特别是谁以及如何通知事件)?

你如何比较芹菜的异步与Twisted的反应堆模型?毕竟芹菜是否使用反应器模型?

谢谢,

2 个答案:

答案 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