celery beat - 如何 运行 用户列表的多个任务?
celery beat - how to run multiple tasks for list of users?
我有三个任务需要为 100 多个用户执行。
示例用户 lsit:
['user1', 'user2', 'user3','user4', 'user5', 'user6']
这里是 celery beat 的代码片段:
for user in users:
APP.conf.beat_schedule = {
"trigger-sync_books": {
"task": "call_sync_books",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
"trigger-sync_stock": {
"task": "call_sync_stock",
"schedule": crontab(minute="*/10"),
'args': (user, bo, gg,),
},
"trigger-sync_customer": {
"task": "call_sync_customer",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
}
但是每次 celery beat 都会为列表中的最后一个用户发送这三个任务。
即,示例列表中的 user6
。
如何确保为所有用户执行这三个任务?
这行不通。您要重新定义 APP.conf.beat_schedule 的次数与您拥有用户的次数一样多,因此基本上所有之前的 5 个配置都会被该循环中的最后一个配置覆盖。
尝试以下操作:
for user in users:
us_sched = {
f"trigger-sync_books-{user}": {
"task": "call_sync_books",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
f"trigger-sync_stock-{user}": {
"task": "call_sync_stock",
"schedule": crontab(minute="*/10"),
'args': (user, bo, gg,),
},
f"trigger-sync_customer-{user}": {
"task": "call_sync_customer",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
}
}
# Python >= 3.5:
APP.conf.beat_schedule = {**APP.conf.beat_schedule, **us_sched}
# Python 3.9: APP.conf.beat_schedule |= us_sched
当上面的循环结束时,您将在 APP.conf.beat_schedule 字典中获得所有用户的所有计划。
我有三个任务需要为 100 多个用户执行。 示例用户 lsit:
['user1', 'user2', 'user3','user4', 'user5', 'user6']
这里是 celery beat 的代码片段:
for user in users:
APP.conf.beat_schedule = {
"trigger-sync_books": {
"task": "call_sync_books",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
"trigger-sync_stock": {
"task": "call_sync_stock",
"schedule": crontab(minute="*/10"),
'args': (user, bo, gg,),
},
"trigger-sync_customer": {
"task": "call_sync_customer",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
}
但是每次 celery beat 都会为列表中的最后一个用户发送这三个任务。
即,示例列表中的 user6
。
如何确保为所有用户执行这三个任务?
这行不通。您要重新定义 APP.conf.beat_schedule 的次数与您拥有用户的次数一样多,因此基本上所有之前的 5 个配置都会被该循环中的最后一个配置覆盖。
尝试以下操作:
for user in users:
us_sched = {
f"trigger-sync_books-{user}": {
"task": "call_sync_books",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
},
f"trigger-sync_stock-{user}": {
"task": "call_sync_stock",
"schedule": crontab(minute="*/10"),
'args': (user, bo, gg,),
},
f"trigger-sync_customer-{user}": {
"task": "call_sync_customer",
"schedule": crontab(minute=0, hour="*/24"),
'args': (user, bo, gg,),
}
}
# Python >= 3.5:
APP.conf.beat_schedule = {**APP.conf.beat_schedule, **us_sched}
# Python 3.9: APP.conf.beat_schedule |= us_sched
当上面的循环结束时,您将在 APP.conf.beat_schedule 字典中获得所有用户的所有计划。