【问题标题】:Python. Threading [closed]Python。线程[关闭]
【发布时间】:2017-02-03 18:15:09
【问题描述】:

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

谢谢

【问题讨论】:

  • 你有什么问题?
  • 请将您的工作机会放在 SO 的“工作”部分。

标签: python multithreading


【解决方案1】:

您可以使用该模块

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

另一种方法(更好)是在第三个线程(检查的那个)上,从进程中调用 .join() ,这样它只会在当前进程结束时调用下一行代码死的。这样您就不必每秒钟都检查一次,效率更高。

【讨论】:

    【解决方案2】:

    你可能想做的是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多