Python3如何在两个线程之间同步一个管理器Dict

时间:2017-02-17 12:05:13

标签: python multithreading multiprocessing python-3.4

我正在研究基于Python的TestSuite应用程序。在这个应用程序中,我有一个运行报告多处理线程,它生成一个由主程序执行的所有测试用例的html报告。

虽然使用Normal线程模块,但它自己的主程序是多线程的。

现在这个报表编写器线程就像一个服务器,主应用程序启动的每个测试用例线程都可以请求这个编写器(IFW)的接口。

从IFW到作者的通信只需使用一个Queue()。但是,每个IFW也可以从编写器请求状态,这里它变得棘手,因为这些数据是特定于IFW ID的。

由于IFW动态行为,不可能只使用队列,因此我使用管理器创建代理队列但是这会给我带来很多问题(为每个接口创建一个新的管理器实例)。所以现在我尝试使用manager().dict()方法。但是我无法弄清楚如何在线程之间进行同步。这是我在IFW的代码:

  def getCurrentTestInfo(self):
    self._UpdateQueue.put_nowait(WriterCtrlCmd(self.WriterIfId, 'get_current_test_info'))
    while self.WriterIfId not in self._RequestDict:
      pass
    res = self._RequestDict[self.WriterIfId]
    del self._RequestDict[self.WriterIfId]
    return res

这里发生的是IFW向编写器发送请求cmd,然后编写器返回测试信息。除此请求外,cmd还有一个特定的IFW ID,此ID是唯一的。

此时我知道dict()中的条目不存在所以我等待条目显示使用"民意调查" :)然后我读了数据。但是,每个人都可以看到此代码中的潜在问题。

有没有办法以某种方式等待通过经理更新字典?也许是一个事件或条件?虽然我想要一些链接到dict()方法的东西,但它自己

注意从put命令到dict更新之间有一段处理时间。所以我无法使用Queue.put()代替Queue.put_nowait()

0 个答案:

没有答案