Google app engine 开发服务器全局缓存(Python)

Google app engine 开发服务器全局缓存(Python),google-app-engine,Google App Engine,我希望有人能为我澄清这一点: GAE开发服务器是否也像生产服务器一样缓存Python全局作用域? 我的印象是没有。 我在文件里找不到这方面的任何信息 谢谢 昆特是的。但是,当您更改代码时,开发服务器将重新启动,并且您的模块具有全新的名称空间 Python在模块之间没有“全局作用域”(比如PHP)。它有名称空间。它们主要是模块名称空间(在导入时创建),并且,如您所知。实例运行时,此缓存处于活动状态。实例通常是python的进程,python将变量值保存在内存中,直到至少有一个引用为止 由于开发服务

我希望有人能为我澄清这一点:

GAE开发服务器是否也像生产服务器一样缓存Python全局作用域? 我的印象是没有。 我在文件里找不到这方面的任何信息

谢谢


昆特是的。但是,当您更改代码时,开发服务器将重新启动,并且您的模块具有全新的名称空间

Python在模块之间没有“全局作用域”(比如PHP)。它有名称空间。它们主要是模块名称空间(在导入时创建),并且,如您所知。实例运行时,此缓存处于活动状态。实例通常是python的进程,python将变量值保存在内存中,直到至少有一个引用为止


由于开发服务器模拟生产服务,因此其工作方式相同,但区别在于devserver监视您对文件所做的更改(我注意到的不仅仅是文件),并在需要时重新加载它们。要保证重置模块导入缓存,您还需要像在生产中一样重新启动服务器。

是的,确实如此。但是,当您更改代码时,开发服务器将重新启动,并且您的模块具有全新的名称空间

Python在模块之间没有“全局作用域”(比如PHP)。它有名称空间。它们主要是模块名称空间(在导入时创建),并且,如您所知。实例运行时,此缓存处于活动状态。实例通常是python的进程,python将变量值保存在内存中,直到至少有一个引用为止


由于开发服务器模拟生产服务,因此其工作方式相同,但区别在于devserver监视您对文件所做的更改(我注意到的不仅仅是文件),并在需要时重新加载它们。要保证重置模块导入缓存,您还需要像在生产环境中一样重新启动服务器。

您所说的“缓存全局范围”是什么意思?您从哪里知道生产环境会这样做,在生产环境中,您可以在模块中定义一个全局变量,GAE将其缓存在当前实例的内存中。因此,它在请求之间保存。例如,您可以使用它为当前实例创建本地的“真实”内存缓存。但是在dev服务器中,我注意到它不是在请求之间保存的。你说的“缓存全局范围”是什么意思?你是从哪里想到生产环境会这样做的?在生产环境中,你可以在模块中定义一个全局变量,GAE会将其缓存在当前实例的内存中。因此,它在请求之间保存。例如,您可以使用它为当前实例创建本地的“真实”内存缓存。但是在dev服务器中,我注意到它不会在请求之间保存。此外,还有一个命令行选项可以禁用自动重启——当与模块相关的文件发生更改时,自动重启[automatic\u restart]会自动重启实例(默认值:True)所以,如果我不在请求之间更改代码,模块中的全局变量应该保持不变?这不是我看到的。即使没有代码更改,每个请求都会重新初始化它。我是否在调试器中运行有关系吗?这个--automatic_restart参数记录在哪里?我找不到。我做了一些测试,但很难预测。我没有做任何代码更改,使用这个--automatic_restart=False参数,有时它会缓存模块以获得一些请求,然后突然决定在接下来的x次中再次导入它。我假设这是一个dev服务器的怪癖。此外,还有一个命令行选项可以禁用自动重启——当与模块相关的文件发生更改时,自动重启[automatic\u restart]会自动重启实例(默认值:True),因此如果我在请求之间不更改代码,我的模块中的全局变量应该保持不变吗?这不是我看到的。即使没有代码更改,每个请求都会重新初始化它。我是否在调试器中运行有关系吗?这个--automatic_restart参数记录在哪里?我找不到。我做了一些测试,但很难预测。我没有做任何代码更改,使用这个--automatic_restart=False参数,有时它会缓存模块以获得一些请求,然后突然决定在接下来的x次中再次导入它。我假设这是一个开发服务器的怪癖。