我正在python 2.7中使用带有concurrent.futures库的Queue。当我在下面运行此代码片段时,它打印四个1并不罕见。我希望线程队列是一种共享数据的方式,但它似乎不是线程安全的。如何使其线程安全?
q = Queue.Queue()
def test():
x = q.get(True)
print x
def thread_pool():
for x in [1,2,3,4,5]:
q.put(x)
#with concurrent.futures.ProcessPoolExecutor(max_workers=2) as executor:
executor = concurrent.futures.ProcessPoolExecutor(max_workers=5)
for x in range(5):
executor.submit(test)
答案 0 :(得分:5)
那不是线程池。它是一个进程池。如果要在进程之间共享对象,则需要使用the number of master nodes代替(并可能将整个程序切换为使用multiprocessing.Queue
;文档目前尚不清楚)。如果您想使用线程而不是进程,则需要使用concurrent.futures.ThreadPoolExecutor
而不是ProcessPoolExecutor
。