LINUX.ORG.RU

В скрипте функции выполняются не по очереди, а вразнобой.

 ,


0

1

Функции в скрипте python выполняются в произвольном порядке. Я ожидаю, что функции выполняются друг за другом. Сам скрипт - это набор функций.

Вся логика находится в файле ‘init.py’(знаки подчеркивания в начале и конце имени файла режет парсер сайта).

Среди них две функции(модули piper и build_apps) запускают многопоточную сборку друг за другом, может из-за этого проблемы.

Исходный код - GitHub.

Ожидаемый лог:

  • Engine *.mmp done!(собираются статические библиотеки)
  • Target ScummVM?.mmp done!(собираются exe)
  • pkg: *.pkg(собираются установочные файлы)

Лог сборки:

Queue size: 92  
Thread count: 6
Queue size: 8
Thread count: 6
pkg: Neverhood.pkg
pkg: Neverhood_cmdline.pkg
Target ScummVM5.mmp done!
Target Neverhoode.mmp done!
 Target ScummVM1.mmp done!
Engine access.mmp done!
Engine adl.mmp done!Engine agi.mmp done!

Engine avalanche.mmp done!
Target ScummVM6.mmp done!
Target ScummVM2.mmp done!
Target ScummVM3.mmp done!
Engine buried.mmp done!
Target ScummVM7.mmp done!
Engine asylum.mmp done!
Target ScummVM4.mmp done!
Engine cge.mmp done!
Engine cge2.mmp done!
Engine chewy.mmp done!
Engine composer.mmp done!
Engine cine.mmp done!
Engine cryo.mmp done!
Далее много «Engine *.mmp done!»

Чяднт? P.S. Python 2.


Функции в скрипте python выполняются в произвольном порядке.

Нет.

Я ожидаю, что функции выполняются друг за другом.

Да.

Среди них две функции(модули piper и build_apps) запускают многопоточную сборку друг за другом

Нет, в смысле что запускают кучу потоков они друг за другом, но они их завершения не ждут => порядок завершения потоков может быть любой.

может из-за этого проблемы.

Какие?

Ожидаемый лог

Почему вдруг такой?

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Нет, в смысле что запускают кучу потоков они друг за другом, но они их завершения не ждут => порядок завершения потоков может быть любой.

Я ожидал, что следующая функция не запустится, пока предыдущая все потоки не отработает.
Как лучше реализовать синхронизацию?

Почему вдруг такой?

Сперва собираем статические библиотеки, затем из этих библиотек собираем exe и затем собираем установщики.

zanac1
() автор топика
Последнее исправление: zanac1 (всего исправлений: 1)
Ответ на: комментарий от zanac1

Как лучше реализовать синхронизацию?

Да как угодно, пока я ее вообще не вижу. Можно хоть ThreadPoolExecutor.map(), но для начала лучше все-таки обосновать внесение этого изменения как-то. Почему-то ведь ее не было и никому это не жало.

Сперва собираем статические библиотеки, затем из этих библиотек собираем exe и затем собираем установщики.

Твои фантазии это здорово, в коде это где?

t184256 ★★★★★
()

запускают многопоточную сборку друг за другом

Функции в скрипте python выполняются в произвольном порядке

man многопоточность

для наглядности попробуй вывод в консоль организовать из 2х потоков и посмотри, что получится

EugeneBas ★★
()
Ответ на: комментарий от t184256

Спасибо за наводку. Скрипт работает как надо

zanac1
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.