Если Вы планируете поиск чего-нибудь удаленно достойного размера, Ваш лучший выбор будет для использования словаря или набора. Иначе в основном необходимо выполнить итерации через каждый элемент итератора, пока Вы не добираетесь до того, который Вы хотите.
, Если это - не обязательно производительность чувствительный код, то понимание списка путь должно работать. Но обратите внимание, что это довольно неэффективно, потому что это пробегается через каждый элемент итератора и затем возвращается по нему снова, пока это не находит то, что это хочет.
Помнят, Python имеет один из самых эффективных алгоритмов хеширования вокруг. Используйте его в ваших интересах.
Самый простой способ - просто переопределить 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
Вы можете установить sys.stdout = Logger ()
, где Logger
- это класс, чей метод записи
(немедленно или с накоплением до \ n
обнаружен) вызывает logging.info
(или любым другим способом, которым вы хотите войти). Пример этого в действии.
Я не уверен, что вы подразумеваете под «данным» процессом (кто его дал, что отличает его от всех других ...?), Но если вы имеете в виду, что вы знаете какой процесс вы хотите выделить таким образом во время его создания, тогда вы можете обернуть его функцию target
(и только это) - или метод run
, который вы переопределяете в подклассе Process
- в оболочку, которая выполняет это «перенаправление» sys.stdout - и оставьте другие процессы в покое.