Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行定期任务_Python_Django - Fatal编程技术网

Python 运行定期任务

Python 运行定期任务,python,django,Python,Django,所以我有一个由Django支持的网页。我在数据库里有很多用户, 我想每5-10分钟对数据库中的每个用户运行一个特定的任务。 最好的方法是什么?一次最多可以有1000个用户。 这样做有用吗?我想下面就是你想要的 或者您只是在linux级别上使用cron 有关如何设置cron的详细信息指南: linux中的cron作业将按预定义的时间间隔、分钟、小时、每日、每周运行脚本 有关详细信息,只需在Linux终端上键入“crontab-e” crontab -e 然后添加一行(任务) 1:分钟(0-

所以我有一个由Django支持的网页。我在数据库里有很多用户, 我想每5-10分钟对数据库中的每个用户运行一个特定的任务。 最好的方法是什么?一次最多可以有1000个用户。
这样做有用吗?

我想下面就是你想要的

或者您只是在linux级别上使用cron

有关如何设置cron的详细信息指南:

linux中的cron作业将按预定义的时间间隔、分钟、小时、每日、每周运行脚本

有关详细信息,只需在Linux终端上键入“crontab-e”

crontab -e
然后添加一行(任务)

1:分钟(0-59) 2:小时(0-23) 第3天(0-31) 4:月份(0-12[12==12月]) 5:一周中的某一天(0-7[7或0==周日]) /path/to/command-要计划的脚本或命令名

完成后,保存并退出。

“芹菜”让Python应用程序(如Django)可以轻松运行后台进程。它最初是专门为Django建造的

他们的示例显示了添加两个数字的简单任务:

from celery.decorators import task

@task
def add(x, y):
    return x + y
您可以在后台执行任务,也可以等待任务完成:

>>> result = add.delay(8, 8)
>>> result.wait() # wait for and return the result
16
以下是有关“cron”之类的计划任务的信息:

您可能还需要安装以使其正常工作,因此它可能比您正在寻找的解决方案更复杂,但它将实现您的目标。如果您愿意(包括使用DB本身)并且理解其局限性,也可以使用更轻的方法来安装它

像芹菜这样的东西有用吗

是的,芹菜带有内置的perodic任务:


另一种选择是与联合国合作。这是我在最近的一个项目中使用的,我对此非常满意。

+1获取cron工作建议。因为它很简单,而且实际上是一个数据库操作工作,与应用程序关系不大,所以不要把它放在Django应用程序中。如果您想扩展并拥有许多Django InstanceElery,那么它是很好的,并且可以正常工作,但是它需要一个代理队列和工作实例。如果您真的需要完成一些实时分布式硬核作业,请使用它。如果只需要一个计划作业,请不要使用它。什么是代理队列和工作实例。每个用户在数据库中都会有一堆网页URL。因此,对于数据库中的每个用户,我必须获取其中的每个网页并对其进行处理。芹菜是最好的还是下面提到的芹菜之一关于芹菜,请查看官方教程和文档。我不认为芹菜是最好的,甚至不是一种选择,只要按时完成预定的任务。尽管芹菜有Django绑定,但它不会使像您这样的任务比cron config+简单脚本更容易。如果您想在脚本中访问Django ORM,这并不难,请进行一些搜索。
>>> result = add.delay(8, 8)
>>> result.wait() # wait for and return the result
16