RuntimeError: Queue objects should only be shared between processes through inheritance

本文介绍了在使用concurrent.futures的ProcessPoolExecutor创建进程池时,如何正确使用multiprocessing.Manager().Queue()避免RuntimeError。错误提示:Queue objects should only be shared between processes through inheritance。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考一如故往博客:https://blog.youkuaiyun.com/qq_37616069/article/details/79831013?utm_source=blogxgwz5

使用concurrent.futures中ProcessPoolExecutor创建进程池,需要使用Queue来完成进程通信时,需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会报错。

示例代码:

 

if __name__ == "__main__":

    result = findSameId(file_path)
    print(len(result))

    q = Manager().Queue(len(result))
    for key in result:
        q.put(key)

    if not os.path.exists(new_train_data_dir):
        os.makedirs(new_train_data_dir)

    executor = ProcessPoolExecutor(max_workers=process_num)
    task_list = [executor.submit(saveNpy, train1_path,train2_path, result,new_train_data_dir,q) for n in range(6)]
def saveNpy(train1_path,train2_path,id_file,save_path,q):

    if not q.empty():
        i = 0
  
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值