Я пытаюсь создать script, который использует многопроцессорный модуль с python. script (позволяет вызывать его myscript.py) получит вход от другого script с помощью pipe.
Предположим, что я вызываю скрипты следующим образом:
$ 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 невозможна, как я могу использовать главный 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 в другом процессе.
заблаговременно.