我使用该程序,创建了3个进程的线程池,但是打印结果出现了,队列容量重复的问题:
这个该怎么解决
代码如下:
from multiprocessing import Pool, Manager, cpu_count
import time
num_list = []
for i in range(10):
num_list.append(i)
start_time = time.time()
def crawler(q, index):
Process_id = "Process"+ str(index)
while not q.empty():
time.sleep(1)
num = q.get(timeout=1)
print(Process_id, num, q.qsize())
if __name__ == '__main__':
manager = Manager()
num_queue = manager.Queue(150000)
# 填充队列
for num in num_list:
num_queue.put(num)
lock = manager.Lock()
# 创建线程池为10个
pool = Pool(processes=3)
# 创建的任务数量
for i in range(3):
pool.apply_async(func=crawler, args=(num_queue, i))
print("Started procesess")
pool.close()
pool.join()
print("Main Process end")
end_time = time.time()
print("时间为"+str(end_time-start_time))