我正在处理一小段代码,其目的是:
例如,考虑下一个示例代码:
import collections
import time
q = collections.deque()
q.append(0)
q.append(1)
def f(i):
d = q.popleft()
print d
time.sleep(1)
q.append(d)
from multiprocessing import Pool
t = Pool(2)
t.map(f, range(10))
运行时,我希望第一对进程分别读取0和1。我真的不介意它们的打印顺序(0,1或1,0)。但是,输出如下:
0
0
1
1
0
0
1
1
0
1
如果deque是线程安全的,为什么会发生这种情况?此外,前8个值每1秒一次打印2个,但对于最后2个值,它们之间也有1秒的暂停。为了澄清这一点,让我用连字符画1秒暂停:
0
0
-
1
1
-
0
0
-
1
1
-
0
-
1
为什么会这样?
非常感谢。
答案 0 :(得分:0)