是什么控制芹菜工人线



我有一个以此命令开始的芹菜工作过程:

celery multi start worker --app=xyz.celery --queue="xyz"
--pidfile="/var/run/xyz/%n.pid"
--pool=gevent --concurrency=500 --time-limit=1800

我的任务对GEVENT并发安全,但对于OS线程而言,我看到了一个间歇性错误,这表明它们是由多个OS线程运行的。

查看工作过程,它似乎总共有7个线程:

$ ps -ef | grep "celery worker"
nobody   26577     1  0 Mar06 ?        00:46:43 /usr/bin/python -m celery worker
--time-limit=1800 --concurrency=500 --pool=gevent --app=xyz.celery
--queue=xyz --pidfile=/var/run/xyz/xyz-worker.service.pid --hostname=worker@xyz
$ cat /proc/26577/status
Name:   python
...
...
Threads:    7
...

(我也可以通过PS -T或通过HTOP看到工人具有这7个线程)

在我有类似设置的其他服务器上,我有4个线程而不是7个线程。我无法弄清楚是什么控制。我在芹菜文档中看不到任何解释的东西。

我所有的服务器都有4个CPU,所以显然不是那样。从我阅读的所有内容中,它应该只是一个线程,因为我告诉它使用Gevent进行并发。

为什么它使用超过1,什么决定了数字,我该如何控制它?

事实证明,这些线程是由gevent维护的,但它们不用于运行用户代码:

默认情况下,gevent将创建线程以处理DNS分辨率 合作时尚(对呼叫者看不见)。gevent Will 永不运行 在单独的线程中隐式中的用户代码而不明确地 指示通过直接使用线程池

进行操作

相关内容

  • 没有找到相关文章

最新更新