我正在测试python 2.7中的multiprocessing Manager软件包,并且遇到了一个问题,该问题已在使用Unix(https://bugs.python.org/issue13978)的NFS中进行了记录。问题是,尽管这突出了问题,但我不清楚您如何解决该问题,或者有什么替代方案?
from multiprocessing import Manager
if __name__ == '__main__':
Manager()
然后我调用脚本并得到:
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'
如果我不能使用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
我不太清楚为什么这行得通或者是明智的选择