|
|
||||||
Можно ли ждать завершения одновременно сразу нескольких потоков?29.01.2017, 00:05. Показов 3142. Ответов 16
Метки нет (Все метки)
Можно ли ждать завершения одновременно сразу нескольких потоков или выставления нескольких эвентов ?
Нечто вроде аналога WaitForMultiplyObjects(). В псевдокоде нечто вроде:
0
|
||||||
| 29.01.2017, 00:05 | |
|
Ответы с готовыми решениями:
16
Правильно создать пул потоков, запустить эти потоки одновременно и дождаться их завершения Как дождаться завершения нескольких потоков Запуск нескольких независимых потоков. Дождаться завершения всех (C++ 11) |
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
||||||
| 29.01.2017, 00:08 | ||||||
0
|
||||||
|
|
||
| 29.01.2017, 00:12 [ТС] | ||
|
Мне нужно знать завершился ли один из потоков и какой именно... (И естественно без бесконечных циклов пожирающих ресурсы) Тоже самый вопрос возникает насчет объектов-событий и процессов.
0
|
||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 29.01.2017, 00:27 | |
|
Avazart, нужно на голом Python? Если использовать pyqt, то достаточно просто сделать.
Или можно использовать очереди. Каждый поток перед завершением пусть что нибудь кидает в очередь, а в главном потоке вызоваем метод get, который будет ждать, пока в очереди появиться хоть что-то.
0
|
|
|
|
||||||
| 29.01.2017, 00:29 [ТС] | ||||||
|
Я нашел решение для потоков, через очередь.
0
|
||||||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 29.01.2017, 00:29 | |
|
2. Для процессов можно сделать
0
|
|
|
|
|||||||||||
| 29.01.2017, 16:30 [ТС] | |||||||||||
|
Задумка вот в чем:
Т.е что бы решить проблему Реализация и использование потоков в PyQt Добавлено через 15 часов 50 минут Все бы хорошо, но если заменить на ProcessPoolExecutor процессы виснут намертво.
0
|
|||||||||||
| 29.01.2017, 17:28 | |||||||
0
|
|||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|||||||||||
| 29.01.2017, 18:15 | |||||||||||
|
Вы, кажется, q забыли передать
Как приблизительный вариант (если уж PoolExecutor)
0
|
|||||||||||
|
|
||||||||||
| 29.01.2017, 19:51 [ТС] | ||||||||||
|
Через колбек я тоже уже догадался, но обнаружил интересную вещь:
А иногда колбеки все же вызываются из создающего потока. Добавлено через 4 минуты У меня выводит примерно следующее:
Вообще какая то непонятная ерунда, я изменил max_workers=5 т.е по сути на каждую задачу должно быть по одному процессу, но выдает что все задачи находятся в одном процессе:
Добавлено через 41 минуту Судя по диспетчеру задач действительно создается 5 процессов, но заметно что в одном из этих процессов а именно у того чей pid выводит создается ~5...7 потоков, в остальных процессах ~2...4 потока. Т.е. как работает и можно ли назвать это нормальной работой ProcessPoolExecutor вообще ничего нельзя сказать.
0
|
||||||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||
| 29.01.2017, 19:53 | ||
|
os.getppid() - родительский процесс, так что, вроде, верно всё. А с потоком да, не понятно. Там в реализации создается поток, который
У меня в процессах по одному потоку, кроме родительского, там их 4 ~ 5
1
|
||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||
| 29.01.2017, 20:41 | ||
|
Добавлено через 3 минуты (Текущий процесс - os.getpid(), разница в одной p)
1
|
||
|
|
||||||||||||
| 29.01.2017, 21:27 [ТС] | ||||||||||||
|
Оказывается есть такая штука которую я искал concurrent.futures.wait c флагами:
Можно было её использовать... Добавлено через 6 минут Не по теме: Касательно использование этого для использования совместно с Qt интерфейсом Реализация и использование потоков в PyQt
1
|
||||||||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|
| 29.01.2017, 22:21 | |
|
Чтобы как-то подытожить с потоками
В моём случае в главном (родительском, том что обозначен как main) процессе 4 потока: 1. Главный поток - main, 2. Поток, явно нами созданный - creator, 3. Поток, созданный реализацией ProcessPoolExecutor, для обеспечения взаимодействия между главным и, создаваемыми PoolExecutor'ом, рабочими процессами (из него, в частности, вызываются колбеки), 4. Наконец, последний, создан реализацией multiprocessing.Queue. Queue используется внутри ProcessPoolExecutor'а для складирования результатов работы дочерних процессов. В дочерних процессах по одному потоку.
0
|
|
| 29.01.2017, 22:21 | |
|
Помогаю со студенческими работами здесь
17
Запуск одновременно нескольких потоков Запуск нескольких потоков одновременно Запуск нескольких потоков одновременно
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|