我一直在玩Tornado chat demo。随便看一下,new_messages
方法似乎不是线程安全的 - 似乎项目可能会被添加到waiters
数组,而同一数组在for
循环中被迭代。
这个演示不是线程安全的吗?或者,它是否是线程安全的,因为Python set
对象本身是线程安全的? 是 Python set
对象线程安全吗?我似乎在这个问题上发现了相互矛盾的观点(而set
这个词在Google中难以有效搜索!)
奖励积分 - 为什么waiters
数组在迭代结束时设置为新set
而不是清空set
?
答案 0 :(得分:6)
默认情况下,Tornado应用程序中不涉及任何线程。 Tornado是一个基于事件的系统,因此只有一个执行路径。你需要弄清龙卷风的事情是在什么时候你将执行权交还给IOLoop。
虽然GIL可以防止一类线程错误,但您仍然可以编写访问和修改程序访问路径之外的数据的应用程序。
答案 1 :(得分:-1)
它是线程安全的,因为纯Python始终是线程安全的。由于global interpreter lock,任何时候都只运行一个Python线程。