0

我写了一个类似twitter的服务,我想用python对其做一些压力测试。我有一个客户端程序,称为“客户端”。我想编写一个脚本来启动“客户端”程序的几个进程,发送一些消息,等待几秒钟然后退出。

我写的是

p = subprocess.Popen(['client','c1','localhost','4981'],stdin=subprocess.PIPE)

现在我不能调用通信方法,因为它在等待 EOF,但过程还没有结束。调用 stdin.flush 似乎也不起作用。

关于如何执行此操作的任何提示?(我不必在 python 中执行此操作,如果有办法使用 bash 脚本执行此操作也可以)

4

2 回答 2

0

您可以使用 bash 循环运行一些客户端并将它们置于后台。如果你需要与一个通信,只需使用fg将其置于前台,然后使用bg再次将其置于后台

于 2012-06-22T10:15:19.430 回答
0

调用p.stdin.close()以表示没有更多消息:

#!/usr/bin/python
import time
from subprocess import Popen, PIPE

# start several processes of the the "client" program
processes = [Popen(['client','c1','localhost','4981'], stdin=PIPE)
             for _ in range(5)]

# send a few messages
for p in processes:
    print >>p.stdin, message
    p.stdin.close()

# wait a few seconds (remove finished processes while we wait)
for _ in range(3):
    for p in processes[:]:
        if p.poll() is not None:
           processes.remove(p)
    time.sleep(1)

# and will exit (kill unfinished subprocesses)
for p in processes:
    if p.poll() is None:
       p.kill()
       p.wait()
于 2013-03-03T00:15:43.643 回答