Я работаю с Python UNO, используя «внутренний» (Libreoffice - это хост-процесс), где интерпретатор Python живет в Libreoffice/Openoffice. Я хотел бы сделать код неблокирующим ... то есть, когда код вызывается как макрос, он запускает второй поток и возвращает основной поток обратно в Office, чтобы он не блокировал пользовательский интерфейс, пока он продолжает запускать очень длительный процесс (время выполнения 10-20 минут).Python UNO и Threads
Когда я пробовал именно это, LibreOffice зависает навсегда. Я искал почти везде, но не как нечетную ссылку на импорт scipy во втором потоке, а затем блокировку, ожидая в этом потоке (myrhread.join()), похоже, что этого не происходит.
В качестве альтернативы можно создать новый ServiceManager, чтобы я мог вызвать второй процесс, а затем связать его обратно с ServiceManager, чтобы я мог вернуться обратно в LibreOffice обычным способом, не блокируя его «призрачной нитью» «?
Добро пожаловать в StackOverflow! Пожалуйста, разместите упрощенную версию кода, который вы пробовали до сих пор, тот, который зависает. Несколько вопросов: вызывается ли код PyUNO в качестве макроса (например, «Инструменты -> Макросы -> Запустить макрос») или снаружи с помощью прослушивающего экземпляра? Кроме того, что делает длительный процесс - он модифицирует документ Writer или делает что-то снаружи, например, создает файл где-то еще в операционной системе? –
Как указано выше, он вызывается как макрос (живет внутри процесса LibreOffice). Если бы это было снаружи, то нить не требовалась бы. Причина, по которой этот код медленный, заключается в том, что после экспериментов я обнаружил, что создание аннотации выполняется довольно медленно. Мне нужно вставить что-то вроде 1500 аннотаций ячеек. Без аннотаций он работает в секундах. –