Django:即使发出其他请求,视图中的函数也可以连续运行



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

在请求/响应周期之外运行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给出了一个非常相似的答案:在后台线程中启动一个进程?

相关内容

最新更新