【发布时间】:2017-10-10 17:35:16
【问题描述】:
我正在开发一个python 2.7 程序,它使用multiprocessing 并行执行这些操作:
- 同时从
file 1和file 2读取一行 - 申请
function(line_1, line_2) - 将函数输出写入文件
我是多处理的新手,一般来说我对 python 并不是非常熟悉。因此,我阅读了很多已经提出的问题和教程:我觉得很接近重点,但我现在可能遗漏了一些我无法真正发现的东西。
代码结构如下:
from itertools import izip
from multiprocessing import Queue, Process, Lock
nthreads = int(mp.cpu_count())
outq = Queue(nthreads)
l = Lock()
def func(record_1, record_2):
result = # do stuff
outq.put(result)
OUT = open("outputfile.txt", "w")
IN1 = open("infile_1.txt", "r")
IN2 = open("infile_2.txt", "r")
processes = []
for record_1, record_2 in izip(IN1, IN2):
proc = Process(target=func, args=(record_1, record_2))
processes.append(proc)
proc.start()
for proc in processes:
proc.join()
while (not outq.empty()):
l.acquire()
item = outq.get()
OUT.write(item)
l.release()
OUT.close()
IN1.close()
IN2.close()
据我了解(到目前为止)作为包的多处理,我正在做的是:
- 为函数的结果创建队列,该队列的大小限制与机器的内核数兼容。
- 用
func()的结果填充此队列。 - 读取队列项直到队列为空,然后将它们写入输出文件。
现在,我的问题是,当我运行这个脚本时,它立即变成了一个僵尸进程。我知道该功能有效,因为没有多处理实现,我得到了我想要的结果。
我想同时读取这两个文件并写入输出,以避免从我的输入文件生成一个巨大的列表然后读取它(输入文件很大)。您是否看到任何严重、完全错误或可改进的地方?
【问题讨论】:
标签: python python-2.7 parallel-processing queue multiprocessing