wx.StaticText线程安全吗?

时间:2011-11-29 06:21:58

标签: python multithreading thread-safety wxpython

例如,我使用wx.StaticText对象作为计数器,它是否是线程安全的?例如:

class TaskFrame(wx.Frame):
    def __init__(self):
        self.Counter = wx.StaticText(MainPanel, id = -1, label = "0")

如果同时在不同线程中GetLabelSetLabel self.Counter,会发生什么情况?我会遇到麻烦吗?

Result = self.Counter.GetLabel()
self.Counter.SetLabel(WhateverResult)

1 个答案:

答案 0 :(得分:2)

它不是线程安全的。引用这个优秀的blog post

  

在wxPython世界中,有三种相关的“线程安全”方法。如果您在更新用户界面时未使用这三者中的一个,则可能会遇到奇怪的问题。有时你的GUI会运行得很好。其他时候,它会崩溃Python没有明显的原因。因此需要线程安全方法:wx.PostEvent,wx.CallAfter和wx.CallLater。

简而言之,您在发布对象上创建了一个接收器:

from wx.lib.pubsub import Publisher
Publisher().subscribe(update_function, 'update') # Params: callback, event name

然后从帖子中使用CallAfter

# Will trigger 'update_function' with argument 'My message'
wx.CallAfter(Publisher().sendMessage, 'update', 'My message')

尽管如此,如果您只想在进程之间共享变量,请使用supported way of doing this。目前,您正在滥用GUI工具包来保存变量,而您应该使用内置类型。正确分享,并使用GUI显示您的数据。