Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在计划任务(beat)的情况下从芹菜中获取任务id_Python_Rabbitmq_Celery_Celerybeat - Fatal编程技术网

Python 如何在计划任务(beat)的情况下从芹菜中获取任务id

Python 如何在计划任务(beat)的情况下从芹菜中获取任务id,python,rabbitmq,celery,celerybeat,Python,Rabbitmq,Celery,Celerybeat,要访问芹菜任务的信息,我需要任务id。手动启动芹菜任务时,我可以使用task.id轻松获取此任务的id(并将其写入DB或执行其他操作)。 如果我使用芹菜节拍,它会定期向员工发送任务,这似乎是不可能的 所以我的问题是,如何在beat将任务发送给芹菜工人时从任务中获取id 在工作人员收到任务的那一刻,控制台显示任务id。因此,我担心的是,在beat将任务发送给工作人员的那一刻,它没有任务id 获取任务id的手动案例: task=tasks.LongRunningTask.delay(用户名来自\u

要访问芹菜任务的信息,我需要任务id。手动启动芹菜任务时,我可以使用task.id轻松获取此任务的id(并将其写入DB或执行其他操作)。 如果我使用芹菜节拍,它会定期向员工发送任务,这似乎是不可能的

所以我的问题是,如何在beat将任务发送给芹菜工人时从任务中获取id

在工作人员收到任务的那一刻,控制台显示任务id。因此,我担心的是,在beat将任务发送给工作人员的那一刻,它没有任务id

获取任务id的手动案例:

task=tasks.LongRunningTask.delay(用户名来自\u formTargetsLaden,密码来自\u formTargetsLaden,url来自\u formTargetsLaden)
task\u id=task.id

也许你们有些人有主意了?

我找到了这个小问题的答案:

如果您需要最初由beat发送的任务的任务id,只需向(已调度的)工作任务添加一个检查功能即可

配置定期任务

这是每天上午11:08(UTC)提醒芹菜开始任务的时间表

@cellery.on\u在\u configure.connect之后
def设置定期任务(发送方,**kwargs):
test=sender.add_periodic_任务(crontab(分钟=8,小时=11),checklist.s(app.config['USR'],app.config['PWD']))
定期执行的任务

这是工人收到beat的“提醒”后芹菜将执行的计划任务

@cellery.task(bind=True)
def检查表(自身、arg1、arg2):
#获取计划任务“检查列表”的任务id
i=inspect()
activetasks=i.active()
任务列表={'activetasks':activetasks}
任务id=任务列表['activetasks']['celery@DESKTOP-XXXXX'][0]['id']#根据环境(本地、Web服务器等)调整本节内容
任务类型=“检查列表”
任务id到任务db=任务(任务id,任务类型)
添加(任务id到数据库)
db.session.commit()
长时间运行任务
[…此处有更多与任务相关的代码…]
因此,我正在使用app.control.inspect的
来检查正在运行的工人。它在引擎盖下使用远程控制命令。
使用
i.active()
您将获得一个字典,您可以轻松地解析它

只要我没有找到任何文档说明如何更容易地从周期性任务中获取任务id,我就坚持使用该解决方案

保存任务id后,可以通过AJAX轻松轮询任务状态等


希望这对你们有帮助:)

标题有误导性。你的问题的表达方式唯一正确的答案是-不,你不能从“芹菜节拍”中得到它,但你可以从其他地方得到它-无论是从单独的应用程序,还是从另一个任务,你甚至可以订阅芹菜事件的通知(例如收到的任务)。谢谢Dejan!我更改了标题,希望其他人现在更清楚。谢谢你的回答,非常有帮助。我不知道,有可能订阅活动…仍在探索芹菜的力量。你不会相信芹菜的结构有多好-我开始使用芹菜时肯定没有…-令人惊奇的软件。