Поддержка языка Python для каналов - PullRequest
2 голосов
/ 30 декабря 2011

Я хотел бы реализовать в python что-то вроде этого:

def producer():
    while True:
        sys.stdout.write("this is my data\n")

def consumer():
    while True:
        data = sys.stdin.read()
        print data

producer | consumer

На самом деле канал должен создать два процесса, подключить stdout и stdin и запускать их до тех пор, пока оба не завершатся.

Есть ли синтаксическая поддержка для этого в python, как в оболочке, или мне нужно вернуться к объекту Popen?

Какая простейшая реализация с точки зрения Popen?

* 1011Может ли кто-нибудь предложить универсальный класс, который можно использовать для реализации этого шаблона трубопровода?Класс будет иметь подпись, подобную этой:
Class Pipe:

    def __init__(self, process1, process2, ...):

, чтобы в моем случае это можно было использовать следующим образом:

mypipe = Pipe(producer, consumer)

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Вы можете использовать модуль pipe :

Модуль pipe определяет класс для абстрагирования концепции конвейера - последовательность преобразователей из одного файла в другой.

Конечно, синтаксис не будет таким же, как у оболочки, но зачем изобретать велосипед?

1 голос
/ 30 декабря 2011

Возможно, вы думаете о сопрограммах .Посмотрите эту очень интересную презентацию Дэвида Бизли.

...