我正在尝试创建一个函数,当被调用时,该函数将以不规则(和未定义)的间隔从外部源提取信息。然后,这些数据将被放置在数据库中,以便以后检索。我希望它在后台运行,即使有其他页面请求。这可能吗?
在请求/响应周期之外运行Django函数的最佳方式是将其实现为自定义管理命令,然后可以将其设置为使用cron
定期运行。
如果您已经在使用它,celery
支持使用celerybeat
的定期任务,但这需要配置和运行celerybeat
守护进程,这可能会让人头疼。Celery还支持长时间运行的任务(在视图中开始,但在自己的时间内完成),如问题标题中所述。
由于加载页面时似乎需要调用函数,因此可以将其作为放入视图中
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
如果您只需要一个更简单的解决方案来尝试,请查看子流程模块。
Django给出了一个非常相似的答案:在后台线程中启动一个进程?