繁体   English   中英

Windows Python将变量传递给池进程

[英]Windows Python Passing Variables to Pool Processes

我有一个Python 2.7程序,可以转换有声读物文件。 由于一堆(100-300)flac文件,而且我有一台闪亮的,装有i7处理器的新计算机,因此我正在开发该程序的多处理版本。

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

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

我使用pool.map(convert,fis),该程序有效。 比旧的一次更新速度更快。

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

谢谢。

您可以尝试对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)

现在,convert应该能够看到一个名为myvariable的变量,在当前情况下这将是fis列表。 之所以应该工作(我没有测试代码,因为我手头没有Windows python安装程序),是因为每个生成的进程都运行初始化程序。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM