Выполнить многопоточность - PullRequest
1 голос
/ 17 марта 2011

Я пишу код для простого клиента чата на python.У меня есть графический интерфейс, 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 голосов
/ 17 марта 2011

Вам необходимо отключить способ получения новых сообщений из основного потока ваших приложений.Это легко сделать с помощью threads в Python, это выглядело бы примерно так:

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.

Эта реализация будет параллельно запускать процесс для поиска дополнительных сообщений, а также будетпользовательский интерфейс.Важно, чтобы интерфейс пользователя синхронизировался с процессом поиска сообщений, иначе вы получите смешные исключения.Это достигается с помощью первого цикла в функции fetch_messages.

0 голосов
/ 17 марта 2011

Вы не упомянули, какой инструментарий GUI вы используете; от mainloop() Я думаю, это Tk.

Ответ на этот вопрос объясняет, как настроить повторяющееся событие. Многопоточность не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...