celery 多 worker 时在 run 中出现 no module named 错误

2015-12-23 09:59:12 +08:00
 yongzhong

hello.py

# coding=utf-8
import time
from manage import app
from celery.contrib.methods import task_method


class HelloService(object):
    @app.task(filter=task_method)
    def say(self):
        time.sleep(4)
        print('hello!')

world.py

# coding=utf-8
import time
from celery.contrib.methods import task_method
from manage import app


class WorldService(object):
    @app.task(filter=task_method)
    def say(self):
        time.sleep(4)
        print('hello')

run.py

# coding=utf-8
from hello import HelloService
from world import WorldService

if __name__ == '__main__':
    HelloService().say.delay()
    WorldService().say.delay()
    print('process done')

使用

celery worker -A hello --loglevel=INFO -n hello
celery worker -A world --loglevel=INFO -n world

分别启动两个 woker

执行 run.py
结果在 hello 的 worker 里报错 DecodeError: No module named world
而再 world 的 worker 里报错 DecodeError: No module named hello

尝试在 run.py 中只保留一个 service 的调用,注释另一个的 import.则不会出现此错误

2926 次点击
所在节点    Python
6 条回复
yongzhong
2015-12-23 10:34:20 +08:00
找到问题所在了...请求 move 或删除 @Livid
latyas
2015-12-23 13:01:05 +08:00
类方法好像不是这么用吧?
latyas
2015-12-23 13:01:24 +08:00
漏打字了。。
类方法作为 task 好像不是这么用吧?
tempdban
2015-12-23 14:51:05 +08:00
顶楼上 直接继承 task 类
yongzhong
2015-12-23 15:46:00 +08:00
tempdban
2015-12-24 09:51:33 +08:00
@yongzhong ok,thanks

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/245521

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX