属性错误:使用芹菜时对象没有属性'task_id'



我在我的项目中使用芹菜5.1.2,在芹菜任务中我想获得芹菜任务id,现在我这样做:

@app.task(ignore_result=True, name='pydolphin.dolphin.tasks.tasks')
def pull_channel_impl(channel_id, level):
print(app.current_task.task_id)
rss = RssSource()
source = rss.select_channel_by_id(channel_id)
RssPullImpl.single_rss_hub(source, rss, level)

但是当我运行这个代码时,显示这个错误:

[2021-07-19 23:55:38,394: INFO/MainProcess] Task pydolphin.dolphin.tasks.tasks[5eaff308-aa3d-4963-a40e-4aee30b7f509] received
[2021-07-19 23:55:38,410: ERROR/ForkPoolWorker-1] Task pydolphin.dolphin.tasks.tasks[2382fc1f-4eb0-4377-b1be-502cce2b6156] raised unexpected: AttributeError("'pull_channel_impl' object has no attribute 'task_id'",)
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 450, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 731, in __protected_call__
return self.run(*args, **kwargs)
File "/opt/apps/pydolphin/dolphin/tasks/tasks.py", line 27, in pull_channel_impl
print(app.current_task.task_id)
AttributeError: 'pull_channel_impl' object has no attribute 'task_id'
[2021-07-19 23:55:38,431: ERROR/ForkPoolWorker-1] Task pydolphin.dolphin.tasks.tasks[15b1d5f5-5ab4-4c21-ac9e-9ed86d4ac628] raised unexpected: AttributeError("'pull_channel_impl' object has no attribute 'task_id'",)
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 450, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 731, in __protected_call__
return self.run(*args, **kwargs)
File "/opt/apps/pydolphin/dolphin/tasks/tasks.py", line 27, in pull_channel_impl
print(app.current_task.task_id)
AttributeError: 'pull_channel_impl' object has no attribute 'task_id'
[2021-07-19 23:55:38,452: ERROR/ForkPoolWorker-1] Task pydolphin.dolphin.tasks.tasks[5eaff308-aa3d-4963-a40e-4aee30b7f509] raised unexpected: AttributeError("'pull_channel_impl' object has no attribute 'task_id'",)
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 450, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 731, in __protected_call__
return self.run(*args, **kwargs)
File "/opt/apps/pydolphin/dolphin/tasks/tasks.py", line 27, in pull_channel_impl
print(app.current_task.task_id)
AttributeError: 'pull_channel_impl' object has no attribute 'task_id'

我做错了吗?在我的项目中,显示任务id已存在于属性中,我应该怎么做才能解决这个问题?

最后,我使用这种方式来获得任务id:

@app.task(ignore_result=True, name='pydolphin.dolphin.tasks.tasks', bind=True)
def pull_channel_impl(self, channel_id, level):
# https://stackoverflow.com/questions/55183581/getting-celery-task-id
task_id = self.request.id
rss = RssSource()
source = rss.select_channel_by_id(channel_id)
RssPullImpl.impl_rss_pull_task_mutex(task_id, source, rss, level)

最新更新