Я пытаюсь создать сценарий, использующий модуль многопроцессорности с 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 невозможна, как я могу использовать stdin main из другого процесса?
обновление:
Хорошо, мне нужно прояснить свой вопрос, поскольку люди думают, что в многопроцессорной обработке нет необходимости.
рассмотрите 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 основных процессов в другом процессе .
заранее спасибо.