Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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

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 Django-如何在一定时间后调用函数_Python_Django_Function - Fatal编程技术网

Python Django-如何在一定时间后调用函数

Python Django-如何在一定时间后调用函数,python,django,function,Python,Django,Function,加载home.html需要一段时间,因为每次单击home.html都会执行函数myfunc。是否有办法在访问home.html之前将myfunc加载到服务器上,以便更快地加载。是否可以每15分钟调用一次myfunc,而不是每次访问home.html 有没有办法在home.html加载之前将myfunc加载到服务器上 访问,以便更快地加载。还有可能有myfunc吗 是否每15分钟调用一次,而不是每次访问home.html 我认为有三种方法可以解决这个问题: 1)缓存 使用缓存,您只需隐藏大量计算的

加载home.html需要一段时间,因为每次单击home.html都会执行函数myfunc。是否有办法在访问home.html之前将myfunc加载到服务器上,以便更快地加载。是否可以每15分钟调用一次myfunc,而不是每次访问home.html

有没有办法在home.html加载之前将myfunc加载到服务器上 访问,以便更快地加载。还有可能有myfunc吗 是否每15分钟调用一次,而不是每次访问home.html

我认为有三种方法可以解决这个问题:

1)缓存

使用缓存,您只需隐藏大量计算的结果,以便在第一次之后保存。这里的好处是,它非常容易使用,易于设置,速度也非常快,但是第一次访问(以及每次无效)时,速度会很慢,并且缓存中存储的内容的大小有限(对于memcached,通常是1MB)

一旦您获得了许可,您通常可以使用:

在您的情况下,看起来您并没有实际使用
myfunc
的结果,所以您没有任何要实际缓存的数据?因此,缓存不会有多大帮助

2)Cron

可能更好的解决方案是创建一个调用
myfunc
的管理命令,然后在服务器的crontab中创建一个条目,每十五分钟运行一次

假设您有一个名为
update\u myfunc
的Django管理命令。然后,您可以编辑服务器的crontab并添加一行,如下所示:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
这将在您编辑crontab的任何服务器上每十五分钟运行一次命令。(要编辑crontab,请输入命令
crontab-e

3)芹菜

您还可以使用Celery异步运行此命令,甚至可以使用
celerybeat
来代替上面的cron条目

为此,您需要安装一个消息队列(Redis很容易安装),然后需要在设置文件中配置它。您还需要芹菜Python库,然后您需要让芹菜在该服务器上以工作者身份或通过celerybeat运行(可能celerybeat就是您想要的)


4)以上各项的组合

还有第四种选择,即结合上述部分。比如说,
myfunc
执行一系列存储在数据库中的计算,然后它将以某种方式计算出的数据组合起来,以便在视图中使用

在这种情况下,您可以将其功能分为两部分:计算部分和视图帮助部分。然后,您可以每隔15分钟使用芹菜或cron运行计算部分,然后可以缓存调用视图帮助部分的视图

此外,如果不将计算存储在数据库中,实际上可以手动将内容放入缓存中。在这种情况下,您可以将一些内容隐藏在缓存中,然后在视图需要时使用专门创建的缓存键进行检索

有没有办法在home.html加载之前将myfunc加载到服务器上 访问,以便更快地加载。还有可能有myfunc吗 是否每15分钟调用一次,而不是每次访问home.html

我认为有三种方法可以解决这个问题:

1)缓存

使用缓存,您只需隐藏大量计算的结果,以便在第一次之后保存。这里的好处是,它非常容易使用,易于设置,速度也非常快,但是第一次访问(以及每次无效)时,速度会很慢,并且缓存中存储的内容的大小有限(对于memcached,通常是1MB)

一旦您获得了许可,您通常可以使用:

在您的情况下,看起来您并没有实际使用
myfunc
的结果,所以您没有任何要实际缓存的数据?因此,缓存不会有多大帮助

2)Cron

可能更好的解决方案是创建一个调用
myfunc
的管理命令,然后在服务器的crontab中创建一个条目,每十五分钟运行一次

假设您有一个名为
update\u myfunc
的Django管理命令。然后,您可以编辑服务器的crontab并添加一行,如下所示:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
这将在您编辑crontab的任何服务器上每十五分钟运行一次命令。(要编辑crontab,请输入命令
crontab-e

3)芹菜

您还可以使用Celery异步运行此命令,甚至可以使用
celerybeat
来代替上面的cron条目

为此,您需要安装一个消息队列(Redis很容易安装),然后需要在设置文件中配置它。您还需要芹菜Python库,然后您需要让芹菜在该服务器上以工作者身份或通过celerybeat运行(可能celerybeat就是您想要的)


4)以上各项的组合

还有第四种选择,即结合上述部分。比如说,
myfunc
执行一系列存储在数据库中的计算,然后它将以某种方式计算出的数据组合起来,以便在视图中使用

在这种情况下,您可以将其功能分为两部分:计算部分和视图帮助部分。然后,您可以每隔15分钟使用芹菜或cron运行计算部分,然后可以缓存调用视图帮助部分的视图

此外,如果您是n,您实际上可以手动将内容放入缓存中
*/15 * * * * /location/of/python /var/www/yourproject/manage.py update_myfunc