为了账号安全,请及时绑定邮箱和手机立即绑定

Python 并行处理 - Linux 和 Windows 之间的不同行为

Python 并行处理 - Linux 和 Windows 之间的不同行为

Cats萌萌 2021-08-05 16:34:41
我试图让我的代码并行,但我遇到了一件我无法解释的奇怪事情。让我定义上下文。我有一个非常繁重的计算要做,读取多个文件,对其进行机器学习分析,涉及很多数学。我的代码按顺序在 Windows 和 Linux 上正常运行,但是当我尝试使用多处理时,一切都会中断。下面是我首先在 Windows 上开发的示例:from multiprocessing.dummy import Pool as ThreadPool def ppp(element):    window,day = element    print(window,day)    time.sleep(5)    returnif __name__ == '__main__'        #%% Reading datasets    print('START')    start_time = current_milli_time()    tree = pd.read_csv('datan\\days.csv')    days = list(tree.columns)    # to be able to run this code uncomment the following line and comment the previous two    # days = ['0808', '0810', '0812', '0813', '0814', '0817', '0818', '0827', '0828', '0829']    windows = [1000]    processes_args = list(itertools.product(windows, days))    pool = ThreadPool(8)     results = pool.map_async(ppp, processes_args)    pool.close()     pool.join()     print('END', current_milli_time()-start_time, 'ms')当我在 Windows 上运行此代码时,输出如下所示:START100010001000 1000 1000100010001000      0810081208080813081408180827081710001000      08290828END 5036 ms125 毫秒内的一组乱七八糟的打印。在 Linux 上也有相同的行为。但是,我注意到,如果我在 Linux 上应用此方法,并查看“htop”,我看到的是一组随机选择执行的线程,但它们从不并行执行。因此,经过一些谷歌搜索后,我想出了这个新代码:from multiprocessing import Pool as ProcessPooldef ppp(element):    window,day = element    print(window,day)    time.sleep(5)    return如您所见,我更改了导入语句,它基本上创建了一个进程池而不是线程池。这解决了 Linux 上的问题,实际上在真实场景中,我有 8 个处理器以 100% 运行,系统中有 8 个进程在运行。输出看起来像以前的那样。但是,当我在 Windows 上使用此代码时,整个运行需要 10 多秒的时间,而且,我没有得到任何ppp.我真的试图寻找一个解释,但我不明白为什么会这样。例如这里:Windows 中的 Python 多处理池奇怪行为,他们讨论了Windows 上的安全代码,答案建议转向线程,作为副作用,这将使代码不是并行的,而是并发的。这里再举一个例子:Python multiprocessing linux windows差异。所有这些问题都描述fork()和spawn处理,但我个人认为我的问题不是这样。Python 文档仍然解释说 windows 没有fork()方法(https://docs.python.org/2/library/multiprocessing.html#programming-guidelines)。总之,现在我确信我不能在 Windows 中进行并行处理,但我认为我从所有这些讨论中得出的结论是错误的。因此,我的问题应该是:是否可以在 Windows 中并行(在不同的 CPU 上)运行进程或线程?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 299 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信