трубы и queue.py

«» " 
Многопроцессорные обеспечивает (межпроцессного взаимодействия) IPC потоковая пакет не имеет, тем выше эффективность. Приоритет должен быть отдан Трубопроводная Queue, избегать использования синхронного режима блокировки / Событие / Семафор / Состояние и т.д. (потому что они не заняты пользовательского процесса ресурсы).
многопроцессорных пакет включает в себя классы и класс труб очереди соответственно поддерживают оба механизма IPC могут быть использованы для передачи и общих объектов очереди .Pipe.
①Pip может быть односторонним (полудуплексный), может быть двунаправленной (Дуплекс ). мы mutiprocessing.Pipe
создавая односторонний канал ( по умолчанию двунаправленного) (дуплекс = False). входной объект из конца трубы процесса, а затем другой конец трубы процесса приема. конец однонаправленной трубы из трубы только позволяет вход процесса, двунаправленного с обоих концов трубы впустили.
"" "
Импорт многопроцессорных
DEF PROC1 (труба):
pipe.send (" Hello ")
Print (" PROC1 REC:», pipe.recv ())

DEF Proc2 (труба):
Печать ( "Proc2 REC:", pipe.recv ())
pipe.send ( "Здравствуйте, ТОО")

ЕСЛИ __name__ == '__main__':
многопроцессорных.freeze_support ()
трубы = multiprocessing.Pipe ()
multiprocessing.Process = Р1 (= целевой Proc1, арг = (труба [0]))
Р2 = multiprocessing.Process (мишень = Proc2, арг = (труба [. 1],))
p1.start ()
p2.start ()
p1.join ()
p2.join ()

«» "
труба здесь является то , что при создании двухсторонней объекта .pipe, и возвращает список , содержащие два элемента, каждый элемент представляет собой один конец трубы (объекты подключения). мы труба send0 сторона вызывает определенный метод для объекта передачи, а другой конец RECV) , чтобы получить.
②Queue класс трубы и подобный, это структура FIFO , но позволяет несколько процессов в класс очереди, множество объектов процесса удаляются из очереди .Queue очередь использует класс (MAXSIZE) создания, MAXSIZE указывает максимальное количество объектов , могут быть сохранены в очереди.
«» "

Импорт многопроцессорных
Импорт ОС, время
DEF inputQ (очередь):
данные = STR (os.getpid ()) +«(PUT ): «+ STR (time.time ())
queue.put (информация)

DEF outputq (Queue, Lock):
Информация = queue.get ()
lock.acquire ()
Печать ((STR (os.getpid ()) + '(GET):' + информация))
lock.release ()

ЕСЛИ __name__ == '__main__':
RECORD1 = []
RECORD2 = []
Блокировка multiprocessing.Lock = () # замок , чтобы предотвратить разбросанные печати
очереди multiprocessing.Queue = (3.)
для ввода в диапазоне (10):
Процесс multiprocessing.Process = (мишень = inputQ, арг = (Очередь))
Process.Start ()
record1.append ( Процесс)
для ввода в диапазоне (10):
Процесс multiprocessing.Process = (мишень = outputq, арг = (очередь, блокировка))
Process.Start ()
record2.append (процесс)
для Р в RECORD1:
p.join ()

Очередь .close () # не более график, близко Queue
для р-в record2:
p.join ()

рекомендация

отwww.cnblogs.com/zhang-da/p/12210537.html