2017-02-03 74 views
-2

嗨,我有一个使用SocketServer模块的服务器/客户端模型。服务器作业是从客户端接收测试名称并启动测试。 使用子流程模块启动测试。 我希望服务器不断回答客户端和任何新的作业堆积在一个列表或队列中,并一个接一个启动,唯一的限制是服务器不应该启动测试,除非当前正在运行一个完成。Python。线程

感谢

+1

您的问题是什么? – ForceBru

+0

请把你的工作机会放在SO的“工作”部分。 –

+0

请参阅[Tour](// stackoverflow.com/tour)并阅读[帮助中心](// stackoverflow.com/help)中的文档。特别是,你应该阅读[如何提出一个好问题](// stackoverflow.com/help/how-to-ask)以及哪些问题[关于主题](// stackoverflow.com/help/on -topic)在这里。 –

回答

0

您可以使用该模块

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

另一种方式(更好)是,在第三个线程(检查的线程)上,从进程调用.join(),以便它只会在当前进程调用下一行代码已经死了。这样你就不必每秒钟都检查一遍,而且效率更高。

0

你可能想要做的是:在服务器套接字

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