我想使用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))
答案 0 :(得分:0)
使用Y
时,未处理的异常由主进程处理。您应该在Y=numpy.random.normal(2*X+2,20)
中重定向stderr,或者像这样包装您的函数:
Pool