Выход журнала многопроцессорной обработки. Процесс

Если Вы планируете поиск чего-нибудь удаленно достойного размера, Ваш лучший выбор будет для использования словаря или набора. Иначе в основном необходимо выполнить итерации через каждый элемент итератора, пока Вы не добираетесь до того, который Вы хотите.

, Если это - не обязательно производительность чувствительный код, то понимание списка путь должно работать. Но обратите внимание, что это довольно неэффективно, потому что это пробегается через каждый элемент итератора и затем возвращается по нему снова, пока это не находит то, что это хочет.

Помнят, Python имеет один из самых эффективных алгоритмов хеширования вокруг. Используйте его в ваших интересах.

65
задан Jed Smith 1 October 2009 в 03:02
поделиться

2 ответа

Самый простой способ - просто переопределить 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

53
ответ дан 24 November 2019 в 15:31
поделиться

Вы можете установить sys.stdout = Logger () , где Logger - это класс, чей метод записи (немедленно или с накоплением до \ n обнаружен) вызывает logging.info (или любым другим способом, которым вы хотите войти). Пример этого в действии.

Я не уверен, что вы подразумеваете под «данным» процессом (кто его дал, что отличает его от всех других ...?), Но если вы имеете в виду, что вы знаете какой процесс вы хотите выделить таким образом во время его создания, тогда вы можете обернуть его функцию target (и только это) - или метод run , который вы переопределяете в подклассе Process - в оболочку, которая выполняет это «перенаправление» sys.stdout - и оставьте другие процессы в покое.

11
ответ дан 24 November 2019 в 15:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: