4

我在标准客户端-服务器模型中使用 pyhton 的多处理包。
我在服务器中有几种类型的对象,我通过该BaseManager.register方法注册,并通过代理从客户端使用(基于AutoProxy类)。

当我从多个客户端线程使用这些代理时,我会弹出随机错误,并且在阅读了一些内容后,我发现代理实例本身不是线程安全的。从python 多处理文档中查看:

代理的线程安全
不要使用来自多个线程的代理对象,除非你用锁保护它。(使用相同代理的不同进程永远不会出现问题。)

我的场景非常适合这个。好的,我知道它为什么会失败。但我希望它工作:) 所以我寻求建议 - 使这个线程安全的最佳方法是什么?
我的特殊情况是(a)我 90% 的时间都在使用单个客户端线程,(b)代理背后的实际对象线程安全的,以及(c)我调用同一个代理的多个方法-同时对象。

和往常一样,互联网,帮助我的人将永生不死!那些尽力而为的人也可能获得安慰奖。

谢谢,
约纳坦

4

1 回答 1

2

不幸的是,这个问题可能与太多人无关:(

以下是我们正在为未来的读者做的事情:

  • 我们将使用常规线程锁来保护“主”代理的使用
  • 主代理为服务器进程中的其他实例提供代理,这些代理在我们的上下文中是特定于线程的,所以我们将使用那些没有锁的

不是一个非常有趣的解决方案,是的,我知道。我们还考虑制作带有内置锁定功能的定制版 AutoProxy(软件包支持)。如果这种情况在我们的系统中重复出现,我们可能会这样做。自动锁定应该小心完成,因为这是在“幕后”完成的,并且可能导致竞争条件死锁。

如果以后有人有类似的问题-请发表评论或直接与我联系。

于 2012-03-05T07:43:03.053 回答