4

我有一个内存泄漏缓慢的应用程序,由于各种原因,我无法摆脱它。所以我想使用让我的工人定期死亡和复活的老把戏。

(即在 multiprocessing Pool 中使用与 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
4

1 回答 1

8

Gunicorn 实际上将其作为配置选项提供 - 看看max_requests

于 2013-03-13T22:13:05.130 回答