【发布时间】:2016-04-06 16:59:12
【问题描述】:
我在使用 python 2.7 多处理(64 位窗口)时遇到问题。假设我有一个文件pathfinder.py,代码如下:
import multiprocessing as mp
class MWE(mp.Process):
def __init__(self, n):
mp.Process.__init__(self)
self.daemon = True
self.list = []
for i in range(n):
self.list.append(i)
def run(self):
print "I'm running!"
if __name__=='__main__':
n = 10000000
mwe = MWE(n)
mwe.start()
对于任意大的 n 值,此代码都可以正常执行。但是,如果我随后在另一个文件中导入并运行一个类实例
from pathfinder import MWE
mwe = MWE(10000)
mwe.start()
我得到以下回溯 if n >= ~ 10000:
Traceback (most recent call last):
File <filepath>, in <module>
mwe.start()
File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\Python27\lib\multiprocessing\forking.py", line 280, in __init__
to_child.close()
IOError: [Errno 22] Invalid argument
我认为这可能是某种竞争条件错误,但使用 time.sleep 延迟 mwe.start() 似乎不会影响此行为。有谁知道为什么会发生这种情况,或者如何解决它?
【问题讨论】:
标签: python windows multiprocessing