You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python将threading.Event作为类成员时实例共享事件的问题求助

问题根源与解决方案

你遇到的这个问题核心原因很明确:你把trigger_event定义成了类属性,而不是实例属性。

在Python中,类属性是绑定在类本身的,所有该类的实例都会共享同一个类属性对象。也就是说,不管你创建多少个Example实例,它们的trigger_event指向的都是同一个threading.Event对象。所以当第一个实例调用set_trigger()触发了set()操作后,这个共享的Event就被置为已触发状态,其他所有实例访问的都是这个已经被设置的Event,自然is_set()都会返回True。

修复方案:使用实例属性

要让每个Example对象拥有独立的Event,只需要把trigger_event的初始化移到类的__init__方法中,将它定义为实例属性即可:

import threading

class Example(object):
    def __init__(self):
        # 每个实例初始化时创建自己独有的Event对象
        self.trigger_event = threading.Event()
    
    def set_trigger(self):
        # do some stuff
        self.trigger_event.set()

验证效果

现在你可以测试一下:创建10个实例,只调用第一个实例的set_trigger(),然后打印每个实例的is_set()结果,会发现只有第一个实例返回True,其余都是False,完美实现了每个对象拥有独立的Event状态。

总结一下:类属性适合存放所有实例共享的数据/对象,而实例属性才是每个实例独有的状态载体,这里的场景显然需要后者。

内容的提问来源于stack exchange,提问作者chaylins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:37:50