Python:没有阻塞的队列

时间:2014-05-02 09:37:58

标签: python multithreading wxpython

我对队列有疑问。我正在用wxpython创建一个GUI,在程序中我需要在一个单独的线程中做一些事情。线程完成后,我必须修改gui。当另一个线程正在运行时,GUI不应该阻塞。 为此我想知道队列并写下这样的东西:

def do_something(gui):
    # Here it normally does something
    gui.queue.put(gui.new)

class GuiFrame(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title="Test")
        self.queue = Queue.Queue()
        self.calculate()

    def calculate(self):
        thread = threading.Thread(target=do_something, args=(self,))
        thread.start()
        function = self.queue.get()
        function()

    def new():
        # Here something modifies the gui
        pass

但问题是现在,程序仍然阻塞,我认为因为队列正在等待一个项目。我可以在一个新线程中启动它,但是我必须再次对队列执行该操作,以在我的主线程中执行该函数。 有谁能够帮我? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我建议您使用wx.CallAfter()。您可以找到一些有用的示例here。您还可以使用pubsub模块向GUI发送消息。然后,由于其他线程,您的GUI不会被阻止。

Here是一个不错的博客,当我遇到类似你的问题时,我会读到这个博客。 您还可以在SO上找到一些其他问题,这些问题可以帮助您理解这一概念herehere,& here