python中的多处理,OSError:[Errno 16]设备或资源繁忙

Con*_*nor 6 python-2.7 python-multiprocessing

我正在测试 python 2.7 中的多处理管理器包,并遇到了一个问题,该问题已经记录在 Unix 上运行的 NFS ( https://bugs.python.org/issue13978 )。问题是虽然这突出了问题,但我不清楚你是如何解决这个问题的,或者替代方案是什么?

from multiprocessing import Manager

if __name__ == '__main__':
    Manager()
Run Code Online (Sandbox Code Playgroud)

然后我调用我的脚本并得到:

Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/util.py", line 274, in 
_run_finalizers
finalizer()
File "/usr/lib/python2.7/multiprocessing/util.py", line 207, in __call__
res = self._callback(*self._args, **self._kwargs)
File "/usr/lib/python2.7/shutil.py", line 252, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "/usr/lib/python2.7/shutil.py", line 250, in rmtree
os.remove(fullname)
OSError: [Errno 16] Device or resource busy: '/home/user/.tmp/pymp-xrl_Vc/.nfs0000000196'
Run Code Online (Sandbox Code Playgroud)

如果我不能使用 Manager,是否有另一种方法可以在多个进程之间共享一个对象,或者是否有解决方法(manager.shutdown 和 del manager 的建议方法没有任何效果)?

今天有更多的时间来研究这个,经过一番挖掘,我找到了一个导致干净退出的解决方案(即没有错误)。

from multiprocessing import Manager
mp = Manager()
mp.shutdown()
#results in the above error

mp = Manager()
mp._process.terminate()
mp.shutdown()
#shutdown complete without any errors
Run Code Online (Sandbox Code Playgroud)

我不太清楚为什么这行得通,或者这是否明智