蟒蛇。穿线

时间:2017-02-03 18:15:09

标签: python multithreading

您好我有一个使用SocketServer模块的服务器/客户端模型。服务器作业是从客户端接收测试名称并启动测试。 使用子进程模块启动测试。 我希望服务器继续回答客户端并将任何新作业堆叠在列表或队列上并依次启动,我唯一的限制是服务器不应启动测试,除非当前正在运行的测试完成。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用模块

multiprocessing
来启动新流程。在服务器端,您将拥有一个引用当前正在运行的进程的变量。您仍然可以让SocketServer运行并接受请求并将它们存储在列表中。每隔一秒(或任何你想要的),在另一个线程中,你可以通过调用isAlive()来检查当前进程是否已经死亡。如果它已经死了,那么只需在列表上运行下一个测试。

另一种方法(更好)是,在第三个线程(检查的线程)上,从进程中调用.join(),这样它只会在当前进程调用后才调用下一行代码死。这样你就不必每秒都检查一下,或者更有效率。

答案 1 :(得分:0)

您可能想要做的是:

  1. 在服务器套接字中获取测试名称,将其放在Queue
  2. 在一个单独的线程中,逐个读取队列中的测试名称
  3. 执行该过程并等待其使用communicate()
  4. 结束
  5. 保留轮询队列以进行新测试,如果测试名称可用则重复步骤2,3,
  6. 同时服务器继续接收并在队列中放置测试名称