python multiprocessing,导入txt文件

时间:2018-10-16 10:23:22

标签: python python-multiprocessing

我正在处理Python多处理,我想了解是否有可能节省时间。

我有3个txt文件,应该由Python读取。因此,我定义了一个打开txt文件并逐行读取的函数。此功能所需的输入只是txt文件的名称:

import multiprocessing as mp
output=mp.Queue()
def funct_imp(name):
     [...]
     output.put([var1,var2,var3])
     return (var1,var2,var3)

然后我比较了第一个脚本:

res01=funct_imp(name01)
res02=funct_imp(name02)
res03=funct_imp(name03)

在第二个示例中,我使用Python多处理:

for name in [name01,name02,name03]:
    pool=mp.Process(target=func_imp,args=name)
    pool.start()
    res=output.get()

现在我有两个主要问题:

  1. 如何从所有流程中获得结果?最后,我在res中发现了与res03相同的结果
  2. 第一个脚本运行时间为18秒,第二个脚本运行时间为25秒。我希望情况恰恰相反(实际上我希望可以减少计时)。

2 个答案:

答案 0 :(得分:0)

import multiprocessing as mp

def read_file(name):
   lines = []
   with open(name) as fp:
       lines = fp.readlines()
   return lines

if __name__ == '__main__':
    names = ['file1.txt', 'file2.txt']  # list of filenames
    pool = mp.Pool()
    results = pool.map(read_file, names)

这会将所有行读入内存,将pool.imap用于更懒的版本,并在read_file中产生行。
results将是行列表。

答案 1 :(得分:0)

尝试使用多处理池:

from multiprocessing import Pool

def f(x):
    -- process the file here --

if __name__ == '__main__':
    p = Pool()
    print(p.map(f, [name01, name02, name03]))

来源:https://docs.python.org/2/library/multiprocessing.html