如何将django请求中的值传递给Celery中的定期任务?

时间:2014-07-21 22:20:20

标签: python django web-applications celery

我有一个关于如何从Django运行并传递args到芹菜任务的问题。

我想要的是什么:

1从提交的表单中获取关键字(hashtagName

2将名称发送给定期任务,以便每隔30秒在页面上显示一次。

问题:

我不清楚应该如何运行。我应该跑: python manage.py runserver在一个终端中 和python manage.py celery worker -B 在另一个终端窗口上,让两个服务同时运行?

如果这是正确的方法,我怎么能将值从Django传递给芹菜任务?由于任务将在我的第二个命令后立即启动。

PS:我读过芹菜文档,关于periodic task的部分对我的问题没有帮助,因为我的函数的args来自用户输入。

谢谢!

更新:

如下面的答案所述,我应该开始收集数据的芹菜任务。如果这是正确的方法,我该如何开始工作?我还不清楚如何同时启动芹菜工作者和django服务器。

我应该在终端中运行命令,如

$ celery -A proj worker -l info

python manage.py runserver 并在视图函数中调用taskfunction().delay

2 个答案:

答案 0 :(得分:1)

这对芹菜来说真的不是一份工作。这可以用于后台任务,你可以触发它们并且可以独立工作 - 复杂的处理,繁重的api调用等等。

这里所需要的是每30秒刷新页面信息的方法。这最好是从浏览器本身完成 - 可能是使用带有setTimeout的JavaScript,要么触发整页请求,要么通过Ajax加载部分内容。

答案 1 :(得分:0)

这似乎完全是解决这个问题的错误方法。

您应该在客户端处理此定期更新,并在需要时为新数据发出AJAX请求。

您向常规django视图发出请求,每次都传递所需的用户输入。