我一直在玩Tornado chat demo。匆匆一瞥,似乎new_messages
方法不是线程安全的 - 好像项目可能被添加到waiters
阵列中,而for
循环中正在迭代相同的阵列。Python Tornado聊天演示应用程序线程安全吗?
此演示不是线程安全的吗?或者,它是否是线程安全的,因为Python set
对象本身是线程安全的? 是 Python set
对象线程安全吗?我似乎找到了在这个问题上意见冲突
奖励积分(和单词set
是demonically很难在谷歌搜索有效!) - 为什么是waiters
数组在迭代结束设置为新set
代替清空set
?
好的,如果你自己运行Tornado(不在Apache或nginx之后),并且在第一个请求仍在执行的过程中另一个请求到达(控制还没有释放回IOLoop),那么第二个请求会发生什么?它会被拒绝吗?这就是为什么龙卷风通常运行在nginx后面的原因吗?那么nginx至少可以排队第二个请求并在Tornado空闲时发送它? – cailinanne 2012-03-06 11:56:34
这与套接字监听队列有关。默认情况下,tornado在开始拒绝连接之前有128个连接的积压队列。在nginx或类似版本下运行的原因之一是,由于它是单线程的,如果你有多个CPU,那么你可以通过运行多个进程来使用机器的全部功能。 – koblas 2012-03-06 14:24:42
非常感谢您的详细信息! – cailinanne 2012-03-06 18:03:41