使用Celery时出现错误信息'未找到"multiprocessing"的处理程序

3 投票
3 回答
3264 浏览
提问于 2025-04-16 18:59

RabbitMQ 现在似乎工作正常。不过,当我尝试

python -m celery.bin.celeryd --loglevel=INFO` 

(普通的 celeryd 不工作)时,我遇到了这个错误:

找不到“multiprocessing”的日志处理程序。

这是完整的输出(稍微做了一些删减):

[2011-06-06 02:08:08,105: WARNING/MainProcess] -------------- celery@blahblah v2.2.6
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqplib://blah@localhost:5672/vhost
- ** ----------   . loader:      celery.loaders.default.Loader
- ** ----------   . logfile:     [stderr]@INFO
- ** ----------   . concurrency: 2
- ** ----------   . events:      OFF
- *** --- * ---   . beat:        OFF
-- ******* ----
--- ***** ----- [Queues]
 --------------   . celery:      exchange:celery (direct) binding:celery


[Tasks]
  . tasks.add
[2011-06-06 02:08:08,812: WARNING/MainProcess] celery@blahblah has started
.
No handlers could be found for logger "multiprocessing"
No handlers could be found for logger "multiprocessing"

我真的很想把这个设置好,这样我就可以继续在 Django 中使用它了!

(这不是我第一次遇到 找不到处理程序 的错误,但我在网上找不到相关的信息…)

3 个回答

0

确保日志文件的目录存在,并且程序有权限在这个目录下写入日志。

我遇到过类似的问题,创建了日志文件的目录后,问题就解决了。

1

你需要确保从主进程启动的所有进程也能正确设置日志记录。这里有一篇文章讨论了如何在使用multiprocessing时进行日志记录。虽然这篇文章提到的是Python 3.2的新特性,但你也可以在早期版本的Python中实现类似的功能——可以参考这篇文章

更新:关键是每个进程都需要初始化日志记录,你需要在代码中安排好这一点,方式类似于第一篇文章中的示例:看看listener_configurerworker_configurer。你可以使用logutils来帮助你,但最重要的是要明白,如果你想避免出现“找不到处理程序”的提示,每个进程都需要配置日志记录。

0

在使用celery的时候,初始化日志的方式似乎有点奇怪。如果我在命令行上加上这个开关 --logfile=yourfile.log,它就能正常工作。但是如果我通过配置文件来读取日志,就会出现不稳定的情况,包括你看到的那些问题。

撰写回答