Python Django-如何在一定时间后调用函数
加载home.html需要一段时间,因为每次单击home.html都会执行函数myfunc。是否有办法在访问home.html之前将myfunc加载到服务器上,以便更快地加载。是否可以每15分钟调用一次myfunc,而不是每次访问home.html 有没有办法在home.html加载之前将myfunc加载到服务器上 访问,以便更快地加载。还有可能有myfunc吗 是否每15分钟调用一次,而不是每次访问home.html 我认为有三种方法可以解决这个问题: 1)缓存 使用缓存,您只需隐藏大量计算的结果,以便在第一次之后保存。这里的好处是,它非常容易使用,易于设置,速度也非常快,但是第一次访问(以及每次无效)时,速度会很慢,并且缓存中存储的内容的大小有限(对于memcached,通常是1MB) 一旦您获得了许可,您通常可以使用: 在您的情况下,看起来您并没有实际使用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)缓存 使用缓存,您只需隐藏大量计算的
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