Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 41

Выход из цикла с потоками join()

15.11.2019, 18:49. Показов 1300. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу придумать нормального решения:

Несколько потоков считают res (каждый по своему), и как только он получен, основная программа едет дальше:

while self.res is None:
pass

Но результат может быть вообще не получен и чтобы это узнать нужно ждать окончания всех потоков:

for t in self.threads:
t.join()

Как можно объединить эти два условия? То есть ждать пока res не перестанет быть none ИЛИ пока все потоки неоттерминейтятся.

Добавлено через 17 минут
кстати

while self.res is None:
pass

меня тоже очень сильно смущает, может посоветуете чем заменить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2019, 18:49
Ответы с готовыми решениями:

LEFT JOIN и выборка из цикла
Есть таблица - категории - id - cat_name И таблица - Подкатегории - id - cat_id - sub_cat_name Нужно одним запросом...

Указать, при каком условии тело цикла for не выполняется ни разу, а при каком осуществляется выход из цикла
В операторе цикла For I := Start downto Finish do <оператор>; при каком условии тело цикла не выполняется ни разу, а при...

Выход из цикла while
Здрасте. Помогите не могу понять, где ошибка, не выходит из цикла вызов функции y=dihot(1,10,2,1);функция function x =...

7
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.11.2019, 18:57
Цитата Сообщение от alexskr Посмотреть сообщение
while self.res is None:
pass
Зачем это вообще? Каждый поток выполняет вычисление(работу) и затем он должен просто вернуть результат. Это все что нужно.
Кстати, делать вычисления на CPU мультипоточными бесполезно. GIL.
0
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 41
15.11.2019, 19:02  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Зачем это вообще? Каждый поток выполняет вычисление(работу)
нет необходимости ждать все потоки (это может быть очень долго), нужно получить первое решение и на остальные уже все равно. хотя этого решения может и вообще не быть и каждый поток закроется без результата.

Цитата Сообщение от Garry Galler Посмотреть сообщение
вычисления на CPU мультипоточными
ну они там еще запросы шлют через реквест, не только считают...
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.11.2019, 19:11
Цитата Сообщение от alexskr Посмотреть сообщение
нет необходимости ждать все потоки
Ну так в Python для такого варианта есть специальные методы в модулях multiprocessing (это процессы) и multiprocessing.dummy (а это потоки).
Python
1
2
3
4
5
    # Создаём набор обработчиков
    pool = Pool(workers)
    # Открываем ссылки в собственных потоках - возвращаем результаты по мере поступления
    for r in pool.imap_unordered(wrapper_request, urls):
        get_result(r)
Читайте документацию.
Вообще в Python масса оберток над голыми потоками. В чистом виде нет смысла их юзать и изобретать велосипед.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
16.11.2019, 13:25
Цитата Сообщение от Garry Galler Посмотреть сообщение
делать вычисления на CPU мультипоточными бесполезно.
Не всегда потоки могут потреблять процессорное время. Есть и другие задачи, например, потоки могут лочиться на ожидании ввода/вывода (сетевого или дискового). Выполнять задачи по очереди - долго, а параллельно - самый раз.

Добавлено через 1 минуту
TC: https://docs.python.org/3/library/queue.html

Добавлено через 55 секунд
Пример: https://docs.python.org/3/libr... Queue.join
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2019, 14:51
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Не всегда потоки могут потреблять процессорное время
Да. Именно поэтому я и написал "вычисления на CPU", потому что ТС говорил про "считают".
А есть ли у него ожидательные IO-задачи - ТС в первом посте не сообщал.
0
2 / 2 / 0
Регистрация: 09.08.2016
Сообщений: 41
16.11.2019, 15:17  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
"вычисления на CPU"
Виноват, моя вина, именно расчеты как таковые здесь вторичны, потоки у меня больше времени тратят на скачивание получение информации, там парсинг еще небольшой, а потом уже начинают считать. поэтому threading был выбрал.

вчера курил мануалы про синхронизацию потоков, и вот такой вариант придумал:

через event = threading.Event()

главная программа затыкается через event.wait()

а в конце каждого потока:

Python
1
2
if all(not t.is_alive() for t in self.threads if t is not self):
    event.set()
То есть он проверяет, если все потоки стопнуты и он последний - то он снимает блок (это если в случае, что решение так и не было найдено).

Ну и соотвественно, если какой-то из потоков найдет решение, то он снимает блок сразу - без оглядки на другие потоки.

Есть в этом чтото или хрень?

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
окей, пошел еще про очереди курить, благодарю!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2019, 16:31
Чем вас не устроил imap_unordered или apply_async? Нужно всего лишь взять первый пришедший результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2019, 16:31
Помогаю со студенческими работами здесь

Выход из цикла с if
Выход из цикла с помощью if. uses Crt; LABEL m1, m2, m3: integer; var f: integer; begin ClrScr; writeln(' Начало счёта: '); ...

Выход из цикла
Добрый вечер. Есть программка которая генерирует примеры, а пользователь должен дать правильный ответ. program lil; uses crt; ...

Выход из цикла
Проблема следующая: Согласно i из внутреннего цикла берутся значения из вектора, но можно выйти за границы вектора. Для границы снизу...

Выход из цикла while
Не могу выйти из цикла до выполнения update. Как это делается в PL/SQL? Можно другое решение. Написать цикл, увеличивающий цену...

Выход из цикла
Здравствуйте. Как мне сделать чтобы при вводе символа который не цифра или точка в цикле while первом. Выводило ошибку и тело цикла do...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru