我有一个内存泄漏缓慢的应用程序,由于各种原因,我无法摆脱它。所以我想使用老把戏,让我的工人定期死亡和复活。
(即在多处理池中使用与 maxtasksperchild 相同的策略...“...在其他系统(例如 Apache、mod_wsgi 等)中发现的释放工作人员持有的资源的常见模式是允许池中的工作人员完成在退出、清理和生成新进程来替换旧进程之前,只需进行一定量的工作......”)
到目前为止,我能想到的最好的办法就是让一个线程休眠,然后调用os._exit(-1)
.
这是要走的路吗,还是有更好的方法来定期回收我的工人?
这是我目前要走的路:
class Quitter(Thread):
def run(self):
while True:
time.sleep(random.randrange(5, 7)):
print str(os.getpid())
os._exit(-1)
Quitter().start()
对此,gunicorn 的响应如下:
2013-03-13 03:21:24 [6487] [INFO] Booting worker with pid: 6487
...
2013-03-13 03:21:30 [6492] [INFO] Booting worker with pid: 6487
Gunicorn 实际上可以将其作为配置选项 - 看看最大请求数 http://docs.gunicorn.org/en/latest/settings.html#max-requests.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)