我正在使用 Celery 构建 Django 应用。
我有一个 @task
,我用 .delay()
触发它。
任务完成后,我需要使用返回值(一个字符串)来更新我的 Postgres 数据库。
我不确定应该将数据库更新代码放在哪里?
我会做吗:
一)
return_value = my_task.delay(..)
(ORM - DB update code)
二)
my_task.delay(..) # <-- Task updates the DB.
这里哪个是 Pythonic 的正确方法?
最佳答案
您应该使用第二种方法,因为延迟方法会立即退出,而无需等待您的任务完成。而 return_value 变量将为 AsyncResult例如,不是你想从 my_task 返回的值。因此,如果您想在任务完成后更新数据库,请在任务内执行。
或者,您可以使用 Task 类的 on_success 处理程序:
class MyTask(Task):
def run(self, *args, **kwargs):
# your task execution code
def on_success(self, retval, task_id, args, kwargs):
# put the retval into the DB
关于python - Celery:何时何地使用运行@task 的.delay() 的返回值来更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221402/