У меня есть две программы на Python (одна из них - подпроцесс), которым необходимо взаимодействовать друг с другом. В настоящее время я делаю это с помощью stdin
и stdout
. Однако запись в stdin
подпроцесса кажется мучительно медленной.
a.py
, программа, которая принимает произвольную строку ввода и выводит время:
from time import time, sleep
from sys import stdout, stdin
while True:
stdin.readline()
stdout.write('%f\n' % time())
stdout.flush()
b.py
, программа, которая запускает a.py
и определяет время, которое потребовалось для записи в stdin
программы и чтения из него stdout
:
from time import time
from subprocess import PIPE, Popen
from threading import Thread
stdin_times = []
stdout_times = []
p = Popen(['python', 'a.py'], stdin=PIPE, stdout=PIPE)
for i in range(100000):
t1 = time()
p.stdin.write(b'\n')
p.stdin.flush()
t2 = float(p.stdout.readline().strip().decode())
t3 = time()
stdin_times.append(t2 - t1)
stdout_times.append(t3 - t2)
p.kill()
print('stdin (min/ave):', min(stdin_times), sum(stdin_times) / len(stdin_times))
print('stdout (min/ave):', min(stdout_times), sum(stdout_times) / len(stdout_times))
Пример вывода:
stdin (min/ave): 1.69277191162e-05 0.000138891274929
stdout (min/ave): 1.78813934326e-05 2.09228754044e-05
Я использую Python 3.1.2 в Ubuntu 10.10.
Почему пишется в a.py
'
Могу ли я заставить эти две программы взаимодействовать быстрее?