如何确保协议的发送方法是线程安全的

时间:2012-02-15 19:24:51

标签: python twisted

我正在使用IntNReceiver协议处理TCP客户端 - 服务器应用程序。服务器正在接受来自客户端的多个TCP连接。我想让其他线程在客户端和服务器上使用协议的sendString方法。我尝试使用同步队列,在单独的线程和reactor.callFromThread()中监视,从那里调用sendString。这似乎有效但在实际的sendString实际发送字符串之前有大约20秒的奇怪延迟。它不会阻塞,立即返回。我运行strace并且send()系统调用肯定会延迟。用扭曲做这种事的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

直接使用callFromThread作为您的队列。反应堆已经在同步和监测它。您想要从非反应堆线程调用foo.sendString()的任何地方,只需执行reactor.callFromThread(foo.sendString)。构建额外的基础设施(例如,您自己的自定义同步队列)只是可能会破坏的其他代码 - 正如您已经发现的那样。