Phi*_*hil 2 python django postgresql asynchronous celery
我正在用Celery构建一个Django应用程序.
我有一个@task我开的.delay().
任务完成后,我需要使用返回值(字符串)来更新我的Postgres DB.
我不知道我应该在哪里放置数据库更新代码?
我这样做:
一个)
return_value = my_task.delay(..)
(ORM - DB update code)
Run Code Online (Sandbox Code Playgroud)
b)
my_task.delay(..) # <-- Task updates the DB.
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |