相同多处理代码的O / P不同

时间:2018-05-13 09:47:45

标签: python-3.x python-multiprocessing

我的代码: 在repl.it IDE中运行它

skip = 3

但是每次我运行它,o / p每次都会变得不同,为什么呢?

1 -

from multiprocessing import Queue

colors = ['red', 'green', 'blue', 'black']
cnt = 1
# instantiating a queue object
queue = Queue()
print('pushing items to queue:')
for color in colors:
    print('item no: ', cnt, ' ', color)
    queue.put(color)
    cnt += 1

print('\npopping items from queue:')
cnt = 1
while not queue.empty():
    print('item no: ', cnt, ' ', queue.get())
    cnt += 1

2-这次它没有显示get o / p

 pushing items to queue:
item no:  1   red
item no:  2   green
item no:  3   blue
item no:  4   black

popping items from queue:
item no:  1   red
item no:  2   green
item no:  3   blue
item no:  4   black

3-这次只有2 o / p的get()部分

pushing items to queue:
item no:  1   red
item no:  2   green
item no:  3   blue
item no:  4   black

popping items from queue:

为什么会发生这种情况!这与我不知道的一些隐藏的多处理内容有关吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

multiprocessing.Queue是使用线程实现的。这意味着每次项目put时,线程需要选择,在某些情况下(例如您的脚本),主线程更快,而不是所有物品都被拿走了。

如果您稍微延迟(time.sleep(0.5 # for example。),您会看到它再次正常运作。