要获取芹菜任务的信息,我需要task_id。当手工启动芹菜任务时,我可以使用task.id轻松地获得此任务的id (并将其写入DB或执行其他操作)。如果我用芹菜打,它会定期地把任务交给工人,那似乎是不可能的。
所以我的问题是,如何从任务中得到id,拍打把任务发送给芹菜的工人?
当工作人员接收到任务时,控制台将显示任务id。所以我担心的是,在任务被敲打发送给工人的那一刻,它没有任务id。
获得task_id的手动案例:
task = tasks.LongRunningTask.delay(username_from_formTargetsLaden, password_from_formTargetsLaden, url_from_formTargetsLaden)
task_id = task.id
也许你们有些人有主意?
发布于 2019-06-27 03:39:30
我找到了这个小问题的答案:
如果您需要最初由by发送的任务的任务id,您可以简单地向您的(调度的) worker任务添加一个检查函数。
配置周期-任务
这是每天上午11点08分(UTC)“提醒”芹菜开始这项任务的时间表。
@celery.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
test = sender.add_periodic_task(crontab(minute=8, hour=11), CheckLists.s(app.config['USR'], app.config['PWD']))
要定期执行的任务
这是计划中的任务,将由芹菜执行后,工人收到“提醒”从拍子。
@celery.task(bind=True)
def CheckLists(self, arg1, arg2):
#get task_id von scheduled Task 'Check-List'
i = inspect()
activetasks = i.active()
list_of_tasks = {'activetasks': activetasks}
task_id = list_of_tasks['activetasks']['celery@DESKTOP-XXXXX'][0]['id'] #adapt this section depending on environment (local, webserver, etc...)
task_type = "CHECK_LISTS"
task_id_to_db = Tasks(task_id, task_type)
db.session.add(task_id_to_db)
db.session.commit()
long_runnning_task
[...more task relevant code here...]
因此,我正在利用app.control.inspect
,它允许您检查运行中的工人。它在引擎盖下使用远程控制命令。使用i.active()
,您将得到一个字典,您可以很容易地解析它。
只要我没有发现任何文档--如何更容易地从周期性任务中获取task_id --我就坚持这个解决方案。
在保存任务id之后,您可以通过AJAX轻松地轮询任务状态等。
希望这对你们有所帮助
https://stackoverflow.com/questions/56785726
复制相似问题