有人可以告诉我 Celery 是在线程中执行任务还是在单独的子进程中执行任务?文档似乎没有解释它(读了 3 遍)。如果它是一个线程,它如何通过 GIL(特别是通知谁以及如何通知事件)?
你如何比较 celery 的 async 和 Twisted 的 reactor 模型?芹菜到底是用反应堆模型吗?
谢谢,
有人可以告诉我 Celery 是在线程中执行任务还是在单独的子进程中执行任务?
两者都不会,任务将在可能在不同机器上的单独进程中执行。它不是您称为“延迟”的线程的子进程。-C 和 -P 选项控制工作进程如何管理它自己的线程。工作进程通过同样完全独立的消息服务获取任务。
你如何比较 celery 的 async 和 Twisted 的 reactor 模型?芹菜到底是用反应堆模型吗?
Twisted 是一个事件队列。它是异步的,但不是为并行处理而设计的。
-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