如何从多处理池重定向打印输出



如何将多处理池中发生的打印重定向到StringIO()

我正在将sys.stdout重定向到StringIO(),只要我不使用multiprocessing库中的pool,就可以很好地工作。

这个玩具代码就是一个例子:

import io
import sys
from multiprocessing import Pool
print_file = io.StringIO()
sys.stdout = print_file
def a_print_func(some_string):
print(some_string)
pool = Pool(2)  
out = pool.map(a_print_func, [['test_1','test_1'],['test_2','test_2']])
a_print_func('no_pool')
print('no_pool, no_func')
fd = open('file.txt', 'w')
fd.write(print_file.getvalue())
fd.close()

file.txt仅包含:

no_pool
no_pool, no_func

而不是:

test_1
test_1
test_2
test_2
no_pool
no_pool, no_func

下面是使用初始值设定项将所有子进程的输出定向到单个文件的解决方案:

import io
import sys
from multiprocessing import Pool
print_file = io.StringIO()
print_file = open("file.txt", "w")
def a_print_func(some_string):
print(some_string)
def foo(*args):
sys.stdout = print_file
pool = Pool(2, initializer = foo)  
out = pool.map(a_print_func, [['test_1','test_1'],['test_2','test_2']])
a_print_func('no_pool')
print('no_pool, no_func')

程序的输出为

no_pool
no_pool, no_func

并且,执行结束时file.txt的内容是:

['test_1', 'test_1']
['test_2', 'test_2']

相关内容

  • 没有找到相关文章

最新更新