任务被调用时__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()) 