任务被调用时__call__执行后,在调用函数(call_my_task)内部无法取得属性(_sid) 但是以-pool=solo 方式启动的话,没有问题。请教哪位同学见过类似问题吗?
# pool 并发方式
# worker_param = ['celery', '-A', 'app.celery', 'worker', '--pool=solo', '-l', 'INFO']
worker_param = ['celery', '-A', 'app.celery', 'worker', '--pool=prefork', '-l', 'INFO']
subprocess.Popen(worker_param)
# task 类
class AloneTask(celery.Task):
def __init__(self, *args, **kwargs):
super(AloneTask, self).__init__()
def __call__(self, *args, **kwargs):
print(f">>>self1={self}")
self._sid = kwargs.get('sid', '1')
def my_func(self):
# [ pool=solo ] ⇒self1==self2
# [ pool=prefork ] ⇒self1 !=self2
print(f">>>self2={self}")
return self._sid
# 调用 call_my_task.delay("100")
@celery.task(base=AloneTask)
def call_my_task(sid):
# [ pool=solo ] ⇒OK
# [ pool=prefork ] ⇒AttributeError: 'call_my_task' object has no attribute '_sid'
print(call_my_task.my_func())
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.