我一直在玩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