Предыстория: я написал простое приложение RUMPS/PyObjC, которое в различных точках делает HTTP-запросы и выводит диалоговые окна системных предупреждений. Большинство HTTP-запросов распределены по потокам, чтобы избежать блокировки основного выполнения.
Запрос: В PyObjC вы не должны создавать диалоговые окна предупреждений в фоновых потоках (только основной процесс может безопасно это делать), поэтому мне было интересно, есть ли разумный шаблон, который я мог бы использовать, чтобы разрешить дочернему процессу потоки для связи со своим родителем, чтобы уведомить его о том, что диалоговое окно предупреждения должно быть создано.
В качестве примера:
- В основной программе определен метод
popAlert()
, который вызывает функции PyObjC для создания диалогового окна предупреждения. - Основная программа запускает поток, который выполняет HTTP-запрос и хочет вывести предупреждение по завершении.
- Дочерний поток, когда HTTP-запрос завершается, каким-то образом обращается к основному процессу, чтобы вызвать
popAlert()
.
На данный момент у меня есть дочерний поток, создающий диалоговое окно предупреждения, которое, по-видимому, небезопасно в PyObjC.
Я довольно новичок в многопоточной/многопроцессорной обработке, и примеры межпотокового взаимодействия, которые я видел до сих пор, по-видимому, в основном включают дочерние потоки, получающие сообщения из механизма, подобного очереди, с родительской факультативной блокировкой, пока очередь не станет пустой. Я еще не видел ничего, что указывало бы на возможность того, чтобы родитель ответил на сообщение из дочернего потока так, как я описываю.
Если для этого требуется реархитектура, это тоже нормально — я не привержен к какому-либо конкретному многопроцессорному подходу.
Любые советы будут высоко ценится. Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию. Большое спасибо за чтение.