为什么多处理不能并行工作?

why multiprocessing isn't working in parallel?

我正在尝试使用 4 个不同的输入并行执行相同的功能。 它在总输入小于 10^5 时工作,但当它变大时它开始并发工作。

 def subList_process(instance):
    print("start")
    l = List(dataSet=instance)
    l.shuffle_set()
    l.sort_set()
    print("done")

   if __name__ == '__main__': 
    p=[]
    p.append(multiprocessing.Process(target=subList_process,args=(lists[0],)))
    p.append(multiprocessing.Process(target=subList_process,args=(lists[1],)))
    p.append(multiprocessing.Process(target=subList_process,args=(lists[2],)))
    p.append(multiprocessing.Process(target=subList_process,args=(lists[3],)))
    
    for process in p : process.start()
    for process in p : process.join()

这是具有两种不同数据大小的输出:

我可以解释当数据量相对较大时发生了什么吗? 我该如何解决?

Multiprocessing 需要序列化(即 pickle)主进程中的参数并将其发送到子进程。由于您的并行函数非常快,函数在下一组输入参数被序列化之前完成。

编辑:回复您的评论 没有解决此问题的好方法,但这里有一些替代方法:

  • 尝试传输有关如何创建参数而不是参数本身的说明。例如,如果您的输入是使用创建者函数生成的,则也只需在子流程中调用创建者函数即可。
  • 如果您只创建一次参数并相对频繁地读取它们,请将它们存储在磁盘上。特别是如果你有一个 SSD 驱动器,你可以在子进程中从磁盘读取参数(例如以泡菜文件的形式)。这可能会更快。