我有两个需要相互通信的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()
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
样本输出:
stdin (min/ave): 1.69277191162e-05 0.000138891274929
stdout (min/ave): 1.78813934326e-05 2.09228754044e-05
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 10.10上使用Python 3.1.2.
为什么写a.py的stdin这么多慢于从阅读stdout?无论如何,我可以让这两个程序更快地进行通信吗?
如果我尝试几次,数字的方差会非常高。
也许您应该设置一个更合理的测试来对标准输入和标准输出进行基准测试,而不需要太多其他开销,这样您就不会测量 cpu 上发生的其他事情。您还可以测量字符串操作和浮点转换。