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

Rob*_*Rob 4 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()
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

gir*_*uid 8

Gunicorn实际上有这个可用作配置选项 - 看看max_requests.