选择reload还是subprocess的帮助

3

你好,我想知道重新导入或重新执行模块的最佳方法,因为我的网络服务器只有一个Apache会话用于所有域和应用程序,如果我需要在一个应用程序上进行一些更改,则重新启动服务器将影响其他应用程序,因此寻找召回模块的最佳方式。如果我选择子进程,我将需要打印响应,但我不知道这是否是最安全的通信方式。请告诉我您的经验,哪种方式最好?

提前致谢!


我不理解你的设置或问题。重新启动Apache非常快,人们几乎察觉不到,而且我不确定为什么单个Apache会话会导致您无法单独重启Python服务器。 - Lennart Regebro
@S.Lott 是的,我正在使用mod_wsgi,但这不是问题。 - hidura
@hidura:当您触碰wsgi脚本时,应用程序将重新加载。这不完全解决了您的问题吗? - S.Lott
@Lennart Regebro,虽然快速,但如果我在同一个Apache会话中运行3个应用程序(a、b、c),并重新启动会话,因为我对应用程序“c”进行了一些更改,“a”和“b”将受到影响,这绝对不是计划中的。 - hidura
由于Apache在重新启动时会关闭所有的请求,所以恢复可能需要5毫秒,但如果在这段时间内有任何请求进来,服务器将不会响应。这是一个问题,因为这不是很专业的事情。我更倾向于避免这个问题,并让应用程序在某种程度上独立于Apache运行。 - hidura
1个回答

1
重新加载模块在生产环境中很少是一个好主意;它是一种用于调试的机制。当您重新加载模块时,模块的内容(类、函数、数据)会被替换,但其他模块对这些项的现有引用不会受到影响。这对于类特别重要:内存中的现有对象仍然引用旧类,而在重新加载后生成的对象则引用新类。
还有另一种选择:从文件中加载Python代码并执行它。比完整子进程的开销小,并且与程序的其余部分关联性较低。原则上,重新执行与重新加载模块相同的警告适用,但是您很少会引用exec'd代码,因为这需要更多的工作。

谢谢,这意味着我要使用子进程,因为我没有太多时间编写冗长的代码。谢谢!!! - hidura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接