Windows 10上的Python多进程处理

7

我正在一台Windows 7电脑和一台Windows 10笔记本上运行一些代码:

def project(filename):
    **Do Something Here**


if __name__ == '__main__':
    pool = Pool(processes=4)
    results = [pool.apply_async(project, args=(filename,)) for filename in filenamelist]
    output = [p.get() for p in results]
    print output

两台计算机都是双核/四线程,所以它们都应该能够运行4个进程。我的问题是,在Windows 10上运行代码时,我会得到4个Python进程,但它们使用0%的CPU,并且不会输出任何内容,而Windows 7 PC则会在所有4个线程上以满负荷运行并正常工作。
如果我在Windows 10笔记本电脑上不使用多进程,那么代码将正常工作,因此问题必须与此有关。 Python的多进程在Windows 10上还没有成功吗? 顺便说一下,我在两台计算机上都运行Python 2.7。
[编辑]:Windows 7 PC的处理器是i5-650,Windows 10笔记本电脑的处理器是i3-2370M。
[更新]:我将笔记本电脑恢复到了Windows 8.1,完全相同的代码按预期运行,这绝对是Windows 10的问题。
[编辑]:我用于生成filenamelist的方法如下,但这在Windows 7上很好地运行。
def get_unfinished_files(indir, outdir):
    filenamelist = []
    for filename in os.listdir(indir):
        if filename not in os.listdir(outdir) and filename.endswith('.png'):
            filenamelist.append(filename)
    return filenamelist

你展示的多进程代码在我的Windows 10和Python 2.7.10上运行正常。我将project简单地设置为打印其传递的文件名,并且没有出现任何问题。也许问题在其他地方(可能是在project的内容或者在主要代码中生成filenamelist的方式)? - Blckknght
似乎project中没有任何问题,因为我可以在不使用多进程的情况下运行代码,然后它就可以正常工作。你可能对filenamelist有所发现,因为这是使用多进程和正常运行之间唯一的区别。我将编辑我的帖子以显示生成filenamelist的方法。 - adam b
2
你能提供一个完整的示例,让任何使用Windows 10的人都可以运行吗? - Asad Saeeduddin
project 在 Windows 10 + 多进程中是否会被执行?添加一些日志记录... 长期以来:在 Windows 10 上,python.exe 目录名称包含一些空格/奇怪字符,这会导致无法正确运行。 - Udi
1个回答

2

我曾经遇到过类似的问题。后来发现这只是我的python版本中的一个bug: https://bugs.python.org/issue35797

当使用multiprocessingvenv时会出现这个问题。

Python 3.7.3中已经修复了这个bug。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接