Выход журнала многопроцессорной обработки.Процесс
есть ли способ зарегистрировать вывод stdout из данного процесса при использовании многопроцессорной обработки.Класс процесса в python?
3 ответа:
самый простой способ может быть, чтобы просто переопределить
sys.stdout
. Немного изменив пример из руководство по многопроцессорной обработке:from multiprocessing import Process import os import sys def info(title): print title print 'module name:', __name__ print 'parent process:', os.getppid() print 'process id:', os.getpid() def f(name): sys.stdout = open(str(os.getpid()) + ".out", "w") info('function f') print 'hello', name if __name__ == '__main__': p = Process(target=f, args=('bob',)) p.start() q = Process(target=f, args=('fred',)) q.start() p.join() q.join()
и:
$ ls m.py $ python m.py $ ls 27493.out 27494.out m.py $ cat 27493.out function f module name: __main__ parent process: 27492 process id: 27493 hello bob $ cat 27494.out function f module name: __main__ parent process: 27492 process id: 27494 hello fred
есть только две вещи, которые я бы добавил к ответу @Mark Rushakoff. При отладке, я нашел его очень полезным, чтобы изменить
вы можете установить
sys.stdout = Logger()
здесьLogger
- это класс, у которогоwrite
метод (немедленно, или накапливается до a\n
обнаружено) звонкиlogging.info
(или любым другим способом вы хотите войти). пример этого в действии.Я не уверен, что вы подразумеваете под "данным" процессом (кто его дал, что отличает его от всех других...?), но если вы имеете в виду, что знаете, какой процесс вы хотите выделить таким образом в момент его создания, то вы можете обернуть его
target
функция (и только) -- илиrun
метод, который вы переопределяете вProcess
подкласс -- в оболочку, которая выполняет эту систему.stdout "перенаправление" -- и оставьте другие процессы в покое.может быть, если вы прибить спецификации немного я могу помочь более подробно...?