在多进程场景中,避免使用共享全局变量来避免数据竞争和死锁问题。可以使用multiprocessing.Manager对象来创建一个可以在多个进程间共享的命名空间。同时,在使用multiprocessing.Pool时,应该使用imap_unordered()而不是map(),因为后者对于大型数据集可能会导致内存问题。
例如,下面的代码使用multiprocessing.Pool来并行处理一个列表,并避免使用全局变量:
import multiprocessing
def process_item(item):
# TODO: 进行某些处理
return processed_item
if __name__ == '__main__':
# 创建一个可以在多个进程间共享的命名空间
manager = multiprocessing.Manager()
results = manager.list()
# 初始化数据集
data = [1, 2, 3, 4, 5]
# 创建进程池并使用imap_unordered()处理数据集
with multiprocessing.Pool(processes=4) as pool:
for result in pool.imap_unordered(process_item, data):
results.append(result)
上一篇:避免使用模运算产生加法和乘法溢出