我正在尝试创建一个函数,该函数在被调用时将以不规则(和未定义)的间隔从外部源提取信息。然后将该数据放入数据库中以供以后检索。我希望它在后台运行,即使在进行其他页面请求时也是如此。这可能吗?
答案 0 :(得分:1)
在请求/响应周期之外运行Django函数的最佳方法是将其实现为custom management command,然后您可以设置为使用cron
定期运行。
如果您已经在使用celery
supports periodic tasks using celerybeat
,但这需要configuring and running the celerybeat
daemon,这可能会令人头疼。 Celery还支持长时间运行的任务(在视图中启动,但在他们自己的时间内完成),如问题标题中所述。
答案 1 :(得分: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
的内容总结为here
如果您只是需要一个更简单的解决方案来试用它,请查看subprocess模块。
这里有一个非常相似的答案Django: start a process in a background thread?