【发布时间】:2019-08-22 17:05:06
【问题描述】:
我正在为一个项目使用 Python 多处理,有时进程会冻结,显然它发生的原因是我发现这个进程正在运行 ps aux:
python -c from multiprocessing.semaphore_tracker import main;main(39)
更多信息:
- 如果我终止进程,一切都会正常运行
- 此问题并不常见,这意味着可能有几天运行一切正常而不会发生
- 我正在使用 PyCharm
- 我正在使用 PyCharm 远程解释器和有时使用 SSH 在服务器中运行此 Python 代码
问题:
- 这个进程出现是怎么回事?
- 为什么它不能自己完成?
- 冻结其他进程的原因是什么?
- 如何避免这种情况?
【问题讨论】:
-
semaphore_tracker顾名思义,就是用来跟踪信号量的。 Unix 支持有限数量的命名信号量,并且它们并不总是在进程退出时被清除。我认为这不是您的程序冻结的原因,您的程序中可能有一些信号量逻辑导致了这种情况。尝试使用您的多处理代码修改您的问题。有关 semaphore_tracker 的更多信息:github.com/python/cpython/blob/3.5/Lib/multiprocessing/… -
我以一种非常简单的方式使用多处理(只需创建一个参数列表然后调用
pool.starmap(func, arguments)),我不使用任何与信号量相关的东西。
标签: python multiprocessing python-multiprocessing