Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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/5/tfs/3.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 Heroku实例是否持久?(或者,我可以使用dict/array作为缓存吗?)_Python_Heroku_Instance_Newrelic - Fatal编程技术网

Python Heroku实例是否持久?(或者,我可以使用dict/array作为缓存吗?)

Python Heroku实例是否持久?(或者,我可以使用dict/array作为缓存吗?),python,heroku,instance,newrelic,Python,Heroku,Instance,Newrelic,所以我的朋友告诉我Heroku上的实例是持久的(我不确定vocab是否正确,但他暗示所有用户共享同一个实例) 因此,如果我有app.py,并且有一个实例运行它,那么所有用户都共享该实例。这意味着我们可以使用dict作为临时缓存来存储小东西,以加快响应时间 例如,如果我在为一个API服务,我可以定义一个缓存,比如,然后 这有多真实?我试着查找这个,但什么也找不到 我将链接的API部署到1 dyno上的heroku,每秒只需几个请求,就需要超过100秒的时间来提供服务。所以我的理解是缓存不工作。(根

所以我的朋友告诉我Heroku上的实例是持久的(我不确定vocab是否正确,但他暗示所有用户共享同一个实例)

因此,如果我有
app.py
,并且有一个实例运行它,那么所有用户都共享该实例。这意味着我们可以使用dict作为临时缓存来存储小东西,以加快响应时间

例如,如果我在为一个API服务,我可以定义一个缓存,比如,然后

这有多真实?我试着查找这个,但什么也找不到


我将链接的API部署到1 dyno上的heroku,每秒只需几个请求,就需要超过100秒的时间来提供服务。所以我的理解是缓存不工作。(根据NewRelic的说法,这里可能需要注意的是,大部分时间都是由于。)

Heroku Devcenter有几篇关于这个问题的文章

进程不共享内存。此外,您的代码是经过优化的,可以分发到。简单地说,这意味着您甚至不知道哪台机器将执行您的代码。理论上,5个用户点击你的应用程序可能会被路由到5个不同的机器和进程

最后但并非最不重要的一点是,请记住,如果您的应用程序只有一个web dyno在运行,则该web dyno将休眠。您必须有多个网络动态对象才能防止网络动态对象睡眠。当dyno进入睡眠模式时,内存被释放,您将丢失内存中的所有数据

这意味着您的方法将不起作用

一般来说,在Heroku中,您应该使用外部存储器。例如,您可以使用并将缓存信息存储在Memcached中


还请注意,不应将文件系统用作缓存。不仅因为它比Memcached慢,还因为Cedar stack文件系统。

如果要使用缓存,请使用redis或Memcached。Werkzeug具有缓存选项。但存储到文件不是一个选项。Heroku文件系统昙花一现,这意味着文件系统在读写之后会有所不同。我同意上面的kracekumar。另外,文件缓存总是比内存缓存慢得多,所以我肯定会研究memcached;尤其是网络动态部分+但是memcached对所有的机器都使用相同的内存,比如说,5台不同的机器?还是将云用作“虚拟”内存的memcached插件?@KaranGoel memcached是共享的,因为它是一个外部服务。它不使用dynos的内存。