>我正在为一个项目使用 Python 多处理,有时进程会冻结,显然发生这种情况的原因是我发现这个过程运行ps aux
:
python -c from multiprocessing.semaphore_tracker import main;main(39)
更多信息:
- 如果我杀死进程,一切正常
- 这个问题并不常见,这意味着可能会有几天运行一切正常而没有发生
- 我正在使用 PyCharm
- 我正在使用PyCharm远程解释器在服务器中运行此Python代码,有时使用SSH
问题:
- 这个过程正在发生什么?
- 为什么它不自己完成?
- 它做了什么来冻结其他进程?
- 如何避免这种情况?
根据文档:
在Unix上使用spawn或forkserver启动方法还将启动信号量跟踪器进程,该进程跟踪程序进程创建的未链接命名信号量。
为什么有人想使用生成启动方法逃脱了我。在ms-windows上,这是一个(非常聪明的(笨蛋,因为该操作系统没有fork
系统调用。
所以我怀疑Pycharm 强加使用forkserver
start 方法,因为它在内部使用多个线程,而标准的 UNIXfork
startmethod 不能很好地处理多线程程序。
尝试从 shell 运行项目。在类 UNIX 操作系统上,应默认为不需要信号量跟踪器进程的fork
启动方法。