使用multiprocessing.Pool时重定向stderr

时间:2017-09-22 18:08:43

标签: python-2.7 python-multiprocessing

我想使用multiprocessing.Pool(python 2.7.13)生成多个进程,并将每个进程的stdout / stderr重定向到一个文件。问题是它适用于stdout,但不适用于stderr。这是一个单一过程的例子。

python stderr.py

在终端(macbook)中运行def run(): foo() 会生成带有正确消息的a.out("这必须转到a.out")。但它产生空的a.err,而错误消息则出现在终端窗口中。

如果我不使用multiprocessing.Pool并直接在主线程中运行它,它会在两个文件上生成正确的消息。这意味着用以下代码片段替换run():

import glob
import csv

new_cards = []
path = 'C:\\Users\\zrc\\Desktop\\GCData2\\*.asc'
files = glob.glob(path)


# First Method

for name in files:
    with open(name) as f:
        for line in f:
            reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
            for row in reader:
                new_cards.append(row)
print(len(new_cards))


# Second Method

for name in files:
    with open(name) as f:
        m = f.readlines()
        for line in m:
            new_cards.append(line)

print(len(new_cards))

1 个答案:

答案 0 :(得分:0)

使用Y时,未处理的异常由主进程处理。您应该在Y=numpy.random.normal(2*X+2,20) 中重定向stderr,或者像这样包装您的函数:

Pool