2

我正在尝试创建一个函数,该函数在调用时将以不规则(和未定义)的时间间隔从外部源中提取信息。然后,这些数据将被放置在数据库中以供以后检索。即使发出其他页面请求,我也希望它在后台运行。这可能吗?

4

2 回答 2

1

在请求/响应周期之外运行 Django 函数的最佳方法是将其实现为自定义管理命令,然后您可以使用cron.

如果你已经在使用它,它celery支持使用周期性任务celerybeat,但这需要配置和运行celerybeat守护进程,这可能会让人头疼。如您的问题标题中所述,Celery 还支持长时间运行的任务(事情在视图中开始,但在自己的时间完成)。

于 2012-08-23T16:10:15.813 回答
0

由于您似乎需要在加载页面时调用该函数,因此您可以将其放在您的视图中

def my_view(request):
    #Call the long running function
    long_running_function()
    #Do view logic and return
    return HttpResponse(...)

为了处理long_running_function你可以使用celery并创建一个tasks.py实现你的外部数据源逻辑的。创建任务、加入队列和配置celery总结在这里

如果您只需要一个更简单的解决方案来尝试它,请查看subprocess模块。

一个非常相似的答案在这里Django: start a process in a background thread?

于 2012-08-23T18:38:50.470 回答