7

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

你如何比较 celery 的 async 和 Twisted 的 reactor 模型?芹菜到底是用反应堆模型吗?

谢谢,

4

2 回答 2

4

有人可以告诉我 Celery 是在线程中执行任务还是在单独的子进程中执行任务?

两者都不会,任务将在可能在不同机器上的单独进程中执行。它不是您称为“延迟”的线程的子进程。-C 和 -P 选项控制工作进程如何管理它自己的线程。工作进程通过同样完全独立的消息服务获取任务。

你如何比较 celery 的 async 和 Twisted 的 reactor 模型?芹菜到底是用反应堆模型吗?

Twisted 是一个事件队列。它是异步的,但不是为并行处理而设计的。

于 2013-08-19T17:25:46.570 回答
2

-c 和 -P 是 celery worker 的并发相关选项。

  -c 并发,--并发=并发
                        处理队列的子进程数。这
                        默认值是您的可用 CPU 数量
                        系统。
  -P POOL_CLS,--pool=POOL_CLS
                        池实现:进程(默认)、eventlet、
                        gevent,独奏或线程。
  

使用小事件: http ://docs.celeryproject.org/en/latest/userguide/concurrency/eventlet.html#enabling-eventlet

http://docs.celeryproject.org/en/latest/internals/reference/celery.concurrency.processes.html

于 2013-08-19T06:49:59.703 回答