【发布时间】:2012-01-13 06:56:04
【问题描述】:
我目前使用 Python 的 C 扩展库,但它似乎存在内存泄漏。在我的celeryd 上运行的任务使用这个 C 扩展库做一些事情,大约一个小时后celeryd 吃掉了很多内存。由于许多原因,我无法修补这个 C 扩展库,但我想为 Celery 中的每个任务分叉进程。芹菜有这样的选择吗?
【问题讨论】:
标签: memory-management fork multiprocessing celery
我目前使用 Python 的 C 扩展库,但它似乎存在内存泄漏。在我的celeryd 上运行的任务使用这个 C 扩展库做一些事情,大约一个小时后celeryd 吃掉了很多内存。由于许多原因,我无法修补这个 C 扩展库,但我想为 Celery 中的每个任务分叉进程。芹菜有这样的选择吗?
【问题讨论】:
标签: memory-management fork multiprocessing celery
您可以使用CELERYD_MAX_TASKS_PER_CHILD 选项或--maxtasksperchild celeryd 开关。
在每个任务之后重新启动工作进程:
CELERYD_MAX_TASKS_PER_CHILD=1
https://celery.readthedocs.org/en/latest/userguide/workers.html#max-tasks-per-child-setting
【讨论】: