Celery: 无法在Windows下运行任务

创建于 2017-06-08  ·  13评论  ·  资料来源: celery/celery

Celery 4.x启动(已修复#4078),但所有任务均崩溃

重现步骤

使用第一步教程(http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)

芹菜-任务工作者--loglevel = info
add.delay(2,2)

预期行为

执行任务并产生结果4

实际行为

芹菜坠毁。

“ C:\ Program Files \ Python36 \ Scripts \ celery.exe”-一个perse.celery worker -l信息

-------------- celery @ PETRUS v4.0.2 (latentcall)


--- * * *-Windows-10-10.0.14393-SP0 2017-06-08 15:31:22



-------------- [队列]
。>芹菜交换=芹菜(直接)钥匙=芹菜

[任务]
。 perse.tasks.celery_add

[2017-06-08 15:31:22,685:INFO / MainProcess]已连接到amqp:// guest :* @127.0.0.1:5672 //[2017-06-08 15:31:22,703:INFO / MainProcess]混杂:搜索邻居[2017-06-08 15:31:23,202:INFO / SpawnPoolWorker-5]子进程5124调用self.run()[2017-06-08 15:31:23,207:INFO / SpawnPoolWorker-4]子进程10848调用self.run()[2017-06-08 15:31:23,208:INFO / SpawnPoolWorker-10]子进程5296调用self.run()[2017-06-08 15:31:23,214:INFO / SpawnPoolWorker-1]子进程5752调用self.run()[2017-06-08 15:31:23,218:INFO / SpawnPoolWorker-3]子进程11868调用self.run()[2017-06-08 15:31:23,226:INFO / SpawnPoolWorker-11]子进程9544调用self.run()[2017-06-08 15:31:23,227:INFO / SpawnPoolWorker-6]子进程16332调用self.run()[2017-06-08 15:31:23,229:INFO / SpawnPoolWorker-8]子进程3384调用self.run()[2017-06-08 15:31:23,234:INFO / SpawnPoolWorker-12]子进程8020调用self.run()[2017-06-08 15:31:23,241:INFO / SpawnPoolWorker-9]子进程15612调用self.run()[2017-06-08 15:31:23,243:INFO / SpawnPoolWorker-7]子进程9896调用self.run()[2017-06-08 15:31:23,245:INFO / SpawnPoolWorker-2]子进程260调用self.run()[2017-06-08 15:31:23,730:INFO / MainProcess]混在一起:独自一人[2017-06-08 15:31:23,747:INFO / MainProcess] celery @ PETRUS准备好了。[2017-06-08 15:31:49,412:INFO / MainProcess]收到的任务:perse.tasks.celery_add [524d788e-e024-493d-9ed9-4b009315fea3][2017-06-08 15:31:49,416:ERROR / MainProcess]任务处理程序引发了错误:ValueError('没有足够的值来解包(预期3,得到0)',)追溯(最近一次通话):工作循环中的文件“ c:\ program files \ python36 \ lib \ site-packages \ billiard \ pool.py”,行359结果=(正确,prepare_result(fun( args,** kwargs)))
_fast_trace_task中的文件“ c:\ program files \ python36 \ lib \ site-packages \ celery \ app \ trace.py”,行518
任务,接受,主机名= _loc
ValueError:没有足够的值可解包(预期3,得到0)

使固定

请参阅请求请求#4078

Documentation Windows Not a Bug

最有用的评论

我必须确认:此错误出现在

Celery 4.1.0
Windows 10 Enterprise 64 bit

运行命令celery -A <mymodule> worker -l info

并且以下变通办法起作用:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

所有13条评论

FWIW我通过使用事件池实现(“ -P eventlet”命令行选项)来解决此问题。

本教程中应提及@drewdogg的解决方案。

我必须确认:此错误出现在

Celery 4.1.0
Windows 10 Enterprise 64 bit

运行命令celery -A <mymodule> worker -l info

并且以下变通办法起作用:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

为工作程序实例定义FORKED_BY_MULTIPROCESSING = 1环境变量就足够了。

@auvipy为我工作,谢谢。

@auvipy它确实解决了问题:)👍
添加:
导入操作系统
os.environ.setdefault('FORKED_BY_MULTIPROCESSING','1')
在定义Celery实例为enougth之前

也许应该在文档中提及? @wonderfulsuccess关心发送请求请求吗?

@wonderfulsuccess

非常感谢

@auvipy它确实解决了问题
添加:
导入操作系统
os.environ.setdefault('FORKED_BY_MULTIPROCESSING','1')
在定义Celery实例为enougth之前

谢谢工作!

@auvipy,如果这只是一行要解决的代码,那为什么不只在celery中修复它,而不是使用文档来推荐用户实施解决方法呢? 为什么在将近两年的时间里,使用如此简单的修复程序彻底破坏平台的错误仍然是一个问题?

想把芹菜放在哪里? 我相信这非常适合Windows特定的指令。 如果要在代码级别修复它,请附带适当的PR。

@auvipy它确实解决了问题:)👍
添加:
导入操作系统
os.environ.setdefault('FORKED_BY_MULTIPROCESSING','1')
在定义Celery实例为enougth之前

您很棒,非常感谢!

@auvipy我一直在寻找这个问题的答案,我花了很多时间尝试解决此问题,非常感谢

此页面是否有帮助?
0 / 5 - 0 等级