我有一个转换有声读物文件的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中的父进程继承任何东西。我只是宁愿在文件列表中没有几百份副本,或者浪费时间在每个子进程中重新创建它。
感谢。
答案 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安装)是每个衍生进程运行初始化程序。希望它有所帮助。