Windows Python将变量传递给池进程

时间:2014-03-25 05:06:34

标签: python windows multiprocessing

我有一个转换有声读物文件的Python 2.7程序。由于有一堆(100-300)个flac文件,而且我有一台带有i7处理器的闪亮的新电脑,我正在研究该程序的多处理版本。

我使用glob获取文件列表,然后创建一个元组列表...

fis = []
for fi in globlist:
  fis.append[(fi, author, title, year, genre)]

我使用pool.map(convert,fis)并且程序有效。比旧的一次性版本更快。

有没有办法在main函数中创建一个元组(作者,标题,年份,流派)并将其用于转换函数?字典也可以。如果我使用全局变量,它不起作用,因为我猜测子进程不会从Windows中的父进程继承任何东西。我只是宁愿在文件列表中没有几百份副本,或者浪费时间在每个子进程中重新创建它。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试为Pool()使用初始化函数。例如,它可能是这样的:

import multiprocessing as mp

def initializer(myvariable):
    global myvariable

if __name__ == "__main__":
    fis = []
    for fi in globlist:
        fis.append[(fi, author, title, year, genre)]
    with mp.Pool(initializer=initializer, initargs=fis) as pool:
        pool.map(convert, fis)

现在转换应该能够看到一个名为myvariable的变量,它在本例中是fis列表。这应该工作的原因(我没有测试代码,因为我手头没有Windows python安装)是每个衍生进程运行初始化程序。希望它有所帮助。