【问题标题】:Python. Threading [closed]Python。线程[关闭]
【发布时间】:2017-02-03 18:15:09
【问题描述】:
您好,我有一个使用 SocketServer 模块的服务器/客户端模型。服务器的工作是从客户端接收测试名称并启动测试。
使用 subprocess 模块启动测试。
我希望服务器继续回答客户端,并将任何新作业堆叠在列表或队列中并一个接一个地启动,我唯一的限制是服务器不应启动测试,除非当前正在运行的测试完成。
谢谢
【问题讨论】:
标签:
python
multithreading
【解决方案1】:
您可以使用该模块
multiprocessing
用于启动新进程。在服务器端,您将拥有一个引用当前正在运行的进程的变量。您仍然可以让您的 SocketServer 运行并接受请求并将它们存储在列表中。每一秒(或任何你想要的),在另一个线程中,你将通过调用 isAlive() 检查当前进程是否已死。如果它死了,那么只需运行列表中的下一个测试。
另一种方法(更好)是在第三个线程(检查的那个)上,从进程中调用 .join() ,这样它只会在当前进程结束时调用下一行代码死的。这样您就不必每秒钟都检查一次,效率更高。
【解决方案2】:
你可能想做的是:
- 在服务器套接字中获取测试名称,将其放入Queue
- 在单独的线程中,从队列中逐一读取测试名称
- 使用communicate()执行进程并等待它结束
- 继续轮询队列以获取新测试,如果测试名称可用,则重复步骤 2、3
- 同时服务器继续接收测试名称并将其放入队列中