#python #multiprocessing
#питон #многопроцессорная обработка #python #многопроцессорность
Вопрос:
Я получил приложение (графический интерфейс: wxPython). Когда я нажимаю на элемент дерева, приложение что-то делает. Но в это время остальная часть приложения блокируется до тех пор, пока задача не будет выполнена. Это нормально, потому что выполнение выполняется в том же процессе.
Теперь я перенес выполнение в отдельный процесс (с многопроцессорным модулем). Я ожидал, что программа больше не блокируется во время выполнения задачи. Но он все еще заблокирован. 🙁
def Click(self, event):
# ....
# collect some data and create
# mytask = [.....]
p = Process(target=taskexecution.run, args=(mytask,))
p.run()
Ответ №1:
Попробуйте, что произойдет, если вы используете p.start()
вместо этого.
Комментарии:
1. Я совершенно не в том направлении думал: @bob morane: вы действительно все еще запускаете функцию в основном процессе, используя
run
вместоstart
. Рассмотрите мой ответ немного справочной информации о правильном обновлении вашего графического интерфейса: это решит вашу проблему.
Ответ №2:
Вы должны использовать потокобезопасные методы при запуске нескольких процессов в wxPython. Как с этим справиться, очень четко и подробно объясняется в этом сообщении в блоге Mouse vs Python.