【发布时间】:2014-10-09 13:21:10
【问题描述】:
假设我这样做:
import multiprocessing as mp
def f(x):
print x
raise OverflowError
if __name__ == '__main__':
pool = mp.Pool(processes=1)
pool.map(f, range(10))
pool.close()
pool.join()
出来:
0
3
6
9
Traceback (most recent call last):
File "test1.py", line 9, in <module>
pool.map(f, range(10))
File "/Users/usualme/anaconda/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/Users/usualme/anaconda/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
OverflowError
现在我将map 替换为imap_unordered:
import multiprocessing as mp
def f(x):
print x
raise OverflowError
if __name__ == '__main__':
pool = mp.Pool(processes=1)
for _ in pool.imap_unordered(f, range(10)):
pass
pool.close()
pool.join()
出来:
0
1
2
3
4
5
Traceback (most recent call last):
File "test0.py", line 9, in <module>
6
7
for _ in pool.imap_unordered(f, range(10)):
8
File "/Users/usualme/anaconda/lib/python2.7/multiprocessing/pool.py", line 659, in next
9
raise value
OverflowError
我的问题:
-
map:为什么会从 0 跳到 3、6 和 9? - for
imap_unordered:这次怎么一直到9?有什么不同?
【问题讨论】:
标签: python python-2.7 multiprocessing