执行多线程进程

时间:2011-03-17 00:21:43

标签: python multithreading parallel-processing

我正在为python中的简单聊天客户端编写代码。我有GUI,一个用于存储字符串和其他数据的php服务器。我想让我的代码能够每1秒更新一次聊天(对话文本字段)。 我发布了一些伪代码:

Initialize Gui
Setup Users
UserX write messageX
messageX sent to server

此时,如果userX(可能是user1或user2)有要显示的新消息,我需要检查每秒的内容。 如果我提出类似的东西:

while True:
  time.sleep(1)
  checkAndDisplayNewMessages()

GUI没有出现!因为在代码的最后我得到了mainloop()

要恢复,我希望我的代码能够让用户异步发送和接收消息!如果用户键入任何消息,则使用部分代码发送消息,而另一部分则在程序运行时不断检查新消息。

2 个答案:

答案 0 :(得分:0)

您没有提到您正在使用的GUI工具包;来自mainloop()我想这是Tk。

The answer to this question explains how to set up a recurring event.不需要多线程。

答案 1 :(得分:0)

您需要分离从应用程序主线程获取新消息的方式。这可以通过Python中的threads轻松完成,它看起来像这样:

import threading

def fetch_messages(ui):
    while not ui.ready():
        #this loop syncs this process with the UI.
        #we don't want to start showing messages
        #until the UI is not ready
        time.sleep(1)

    while True:
        time.sleep(1)
        checkAndDisplayNewMessages()

def mainlogic():
    thread_messages = threading.Thread(target=fetch_messages,args=(some_ui,))
    thread_messages.start()
    some_ui.show() # here you can go ahead with your UI stuff
                   # while messages are fetched. This method should
                   # set the UI to ready.

此实现将并行运行以寻找更多消息,并且还将启动UI。 UI必须与流程同步以寻找消息,否则您最终会遇到有趣的异常。这是通过fetch_messages函数中的第一个循环实现的。