龙卷风里几乎没有任何东西是安全的。这是有充分理由的。
尤其是线程安全队列将导致不必要的开销。然而,队列的线程安全可能意味着各种各样的事情,常见的使用意味着多生产者、多消费者的硬情况。
然而,一个简单得多的案例是单一生产者,单一消费者的案例。对“旋风”的操作安全吗?
# on event loop in Thread 1
yield queue.get()
# In normal code in Thread 2
queue.put_nowait(msg) 发布于 2015-10-13 17:43:21
不,根据术语的任何定义,龙卷风队列都不是线程安全的。考虑将"put_nowait“调用安排在”线程2“的主线程上:
IOLoop.current().add_callback(queue.put_nowait, msg)回调
在任何时候从任何线程调用此方法都是安全的,但信号处理程序除外。请注意,这是IOLoop中唯一能够保证线程安全的方法;所有其他与IOLoop的交互都必须从IOLoop的线程中完成。add_callback()可用于将控制从其他线程传输到IO循环的线程。
如果队列配置了最大大小,那么put_nowait可能引发异常并丢失"msg“元素。但是,如果没有最大的大小,这种技术应该适用于您。
https://stackoverflow.com/questions/33105190
复制相似问题