如何在枪炮中过期(并复活)工人?

时间:2013-03-13 22:09:51

标签: python gunicorn

我有一个缓慢的内存泄漏的应用程序,由于各种原因,我无法摆脱。因此,我想使用让我的工人定期死亡和复活的旧技巧。

(即在多处理池中使用与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()

枪炮响应:

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

1 个答案:

答案 0 :(得分:8)

Gunicorn实际上已将此作为配置选项提供 - 请查看max_requests