美好的一天!打印多线程子进程
我有一个python脚本,它会创建一个文件列表,并在multiprocess.Pool.map和线程函数处理它。线程函数使用外部可执行文件并通过subprocess.check_call调用它。这个outter可执行文件向stdout输出一些信息。
所以我有问题,阅读此输出 - 有时它搞砸,我无法从中得到任何有用的信息。我已经阅读了python中的打印和多线程,但我认为这不完全是我的问题,因为我没有明确地在我的脚本中调用print函数。
我该如何解决这个问题?谢谢。
另外,我注意到,如果我重定向输出从我的脚本文件,输出不乱的。
[更新]:
如果我运行脚本,这工作得很好:蟒蛇mp.py> mp.log
import time, argparse, threading, sys
from os import getenv
from multiprocessing import Pool
def f(x):
cube = x*x*x
print '|Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut %d|'%(cube)
return cube
if __name__ == '__main__':
#file = open('log.txt', 'w+')
parser = argparse.ArgumentParser(description='cube', usage='%(prog)s [options] -n')
parser.add_argument('-n', action='store', help='number', dest='n', default='10000', metavar = '')
args = parser.parse_args()
pool = Pool()
start = time.time()
result = pool.map(f, range(int(args.n)))
end = time.time()
print (end - start)
#file.close()
的原因是不同的进程打印到同一个终端,让你得到一个线程的一条线,不是一条线第二个线程,比第一个线程的另一行(或至少多数民众赞成在我认为你的问题看起来像关于“凌乱的输出”) – usethedeathstar
我该如何解决这个问题?锁是毫无用处的。我也尝试用sys.stdout.write替换所有打印的expr,但它也没有帮助。 – kvv
在这种情况下,我想解决的办法是让你的外部可执行文件打印输出到为每个线程log.txt的,这样它会工作 – usethedeathstar