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

时间:2012-08-23 15:45:27

标签: django

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

2 个答案:

答案 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?