Я пытаюсь создать скрипт, который использует многопроцессорный модуль с python. Сценарий (назовем его myscript.py) получит входные данные от другого сценария с конвейером.
Предположим, я называю сценарии так:
$ python writer.py | python myscript.py
А вот и коды;
// writer.py
import time, sys
def main():
while True:
print "test"
sys.stdout.flush()
time.sleep(1)
main()
//myscript.py
def get_input():
while True:
text = sys.stdin.readline()
print "hello " + text
time.sleep(3)
if __name__ == '__main__':
p1 = Process(target=get_input, args=())
p1.start()
это явно не работает, поскольку объекты sys.stdin различаются для основного процесса и p1. Поэтому я попытался это решить,
//myscript.py
def get_input(temp):
while True:
text = temp.readline()
print "hello " + text
time.sleep(3)
if __name__ == '__main__':
p1 = Process(target=get_input, args=(sys.stdin,))
p1.start()
но я сталкиваюсь с этой ошибкой;
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "in.py", line 12, in get_input
text = temp.readline()
ValueError: I/O operation on closed file
Итак, я полагаю, что стандартный stdin-файл закрыт, и я не могу прочитать его. При таком соединении, как я могу передать основной файл stdin другому процессу? Если передача stdin невозможна, как я могу использовать main stdin из другого процесса?
Обновление:
Хорошо, мне нужно уточнить мой вопрос, так как люди думают, что использование многопроцессорной обработки не является действительно необходимым.
рассмотрим myscript.py
вот так;
//myscript.py
def get_input():
while True:
text = sys.stdin.readline()
print "hello " + text
time.sleep(3)
def do_more_things():
while True:
#// some code here
time.sleep(60*5)
if __name__ == '__main__':
p1 = Process(target=get_input, args=())
p1.start()
do_more_things()
Итак, мне действительно нужно запустить функцию get_input () параллельно с основной функцией (или другими подпроцессами).
Извините за конфликты, у меня приличный английский, и я думаю, я не мог прояснить этот вопрос. Я был бы признателен, если бы вы, ребята, могли сказать мне , могу ли я использовать объект STDIN основных процессов в другом процессе .
заранее спасибо.