Несмотря на многопроцессорность, программа по-прежнему заблокирована

#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.