gpt4 book ai didi

python threading.Event : add event params

转载 作者:太空狗 更新时间:2023-10-29 23:59:27 29 4
gpt4 key购买 nike

我可以使用线程模块中的 Event 对象,不仅通知某个事件已经发生,而且还提供该事件的一些参数,例如:

e = Event()
...
e.param = "this is event data"
e.set()

另一个线程:

e.wait()
data = e.param

乍一看似乎没问题,但有没有什么问题是可能发生的?安全吗?如果不是,还有什么其他方法可以更好地在线程之间传递一些事件参数?

谢谢。

最佳答案

你真的不需要将值附加到 Event 对象,你可以使用一些与 Event 分开的其他全局,属性等,并且使用 Event 表示它已更新。这是通常的做事方式。

但是您所做的确实。除了使用事件发送信号的常见竞争问题之外,它不会增加任何其他问题。然而,它似乎有点误导 — 它使 param 看起来好像以某种方式同步,而实际上却不是。

如果您试图发出新值已准备就绪的信号,并同步对该值的访问,您几乎总是需要一个Condition,如下所示:

c = Condition()
data = None
...

with c:
data = "new data"
c.notify()

...

with c:
while data is None:
c.wait()

或者,更简单地说,只使用一个queue并且一开始就不要共享变量:

q = Queue()

...

q.put(data)

...

data = q.get()

关于 python threading.Event : add event params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146404/

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