gpt4 book ai didi

python - 单个生产者/消费者 Tornado 队列是线程安全的吗?

转载 作者:行者123 更新时间:2023-12-01 04:26:12 26 4
gpt4 key购买 nike

Tornado 中几乎没有什么是线程安全的。这是有充分理由的。

线程安全队列尤其会产生不必要的费用。然而,队列的线程安全性可能意味着多种情况,常见的使用意味着困难的多生产者、多消费者情况。

但是,更简单的情况是单一生产者、单一消费者的情况。以下这对操作对于 Tornado 安全吗?

# on event loop in Thread 1
yield queue.get()

# In normal code in Thread 2
queue.put_nowait(msg)

最佳答案

不,根据术语的任何定义,Tornado 队列都不是线程安全的。考虑从“线程 2”在主线程上调度“put_nowait”调用:

IOLoop.current().add_callback(queue.put_nowait, msg)

Here is the doc for add_callback :

It is safe to call this method from any thread at any time, except from a signal handler. Note that this is the only method in IOLoop that makes this thread-safety guarantee; all other interaction with the IOLoop must be done from that IOLoop‘s thread. add_callback() may be used to transfer control from other threads to the IOLoop‘s thread.

如果队列配置了最大大小,则 put_nowait 可能会引发异常并丢失“msg”元素。但如果没有最大尺寸,此技术应该适合您。

关于python - 单个生产者/消费者 Tornado 队列是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33105190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com