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

Ожидание конца отработки потоков

07.09.2019, 23:25. Показов 5786. Ответов 6

Студворк — интернет-сервис помощи студентам
Форумчане прошу помощи, задумал ускорить свой скрипт и столкнулся с проблемой. Насколько вычитал в интернете поток продолжает работу до того момента, пока не отработает таргетная функция. Проблема в том, что из одного потока нужно запустить несколько других для обработки данных, после дождаться завершения всех этих потоков и продолжить цикл в(см код). На ум приходит только костыль waiting(), но понимаю, что можно оформить это правильнее. Хочется делать правильно поэтому прошу помощи


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
""" 
Код схематичен
"""
from threading import Thread
import threading
import time
import random
 
def f():
    print("начинаю работу " + threading.current_thread().getName())
    time.sleep(random.randint(1, 5))
    print("закончил работу " + threading.current_thread().getName())
 
 
def waiting():
    while True:
        if "поток параллельной обработки" in [t.getName() for t in threading.enumerate()]:
            print("потоки еще в работе")
            time.sleep(1)
        else:
            break
    print("все потоки дополнительной обработки остановлены")
 
 
while True:
    """
    тут код, который выдает список объектов для обработки
    """
    for i in range(3):
        Thread(name="поток параллельной обработки", target=f).start()
    """
    вот тут нужен грамотный кусок кода, чтобы подождать пока все потоки отработают вместо waiting()
    """
    waiting()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2019, 23:25
Ответы с готовыми решениями:

Потоки. Порождение потоков. Ожидание потоков
Всем привет. Есть такая программа, нужно ее упростить как можно сильнее. Убрать лямбды и тд. Написать программу, порождающую N потоков...

Потоки. Порождение потоков. Ожидание потоков
Помогите пж. Очень срочно нужно!!! Написать программу, порождающую N потоков (N – вводится с клавиатуры). Каждый поток выводит...

Ожидание конца процесса
Добрый день. Суть вопроса: Есть процесс, который запускает программу в консольном режиме с параметрами string cmd = "P0 -sSU...

6
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
07.09.2019, 23:46
делается это через вызов метода .join() объекта класса Thread.

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
""" 
Код схематичен
"""
from threading import Thread
import threading
import time
import random
 
def f():
    print("начинаю работу " + threading.current_thread().getName())
    time.sleep(random.randint(1, 5))
    print("закончил работу " + threading.current_thread().getName())
 
 
def wait_until_threadings_finished():
    for t in threading.enumerate():
        t.join()
    print("все потоки дополнительной обработки остановлены")
 
 
while True:
    """
    тут код, который выдает список объектов для обработки
    """
    for i in range(3):
        Thread(name="поток параллельной обработки", target=f).start()
    """
    вот тут нужен грамотный кусок кода, чтобы подождать пока все потоки отработают вместо waiting()
    """
    wait_until_threadings_finished()
1
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 34
08.09.2019, 00:04  [ТС]
Получается, после этого сборщик мусора все переменные внутри потока удаляет и с памятью все будет ок?
0
 Аватар для Wi0M
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
08.09.2019, 01:32
Не совсем. Поток это не процесс. Там работают те же правила что и везде. Сборщик мусора убирает только т.е. данные на которые больше никто не ссылается.
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.09.2019, 01:37
Цитата Сообщение от Zireae1 Посмотреть сообщение
задумал ускорить свой скрипт и столкнулся с проблемой.
Да, и эта проблема - GIL. Глобальная блокировка, которая не дает ничего распараллеливать. То есть ускорить код не получится, если задача - CPU-bound, вычислительная.
Потоки в Python ускоряют только код, который чего-то ожидает... например, ответа сервера или дисковой подсистемы. То есть задачи ввода-вывода.
Для CPU задач помогает только мультипроцессность.
2
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 34
08.09.2019, 02:24  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
например, ответа сервера или дисковой подсистемы
ну да мне получается надо сразу несколько запросов на сервер делать и ждать как раз ответа, так уж точно быстрее)
спасибо за ответ
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.09.2019, 13:04
Цитата Сообщение от Zireae1 Посмотреть сообщение
несколько запросов на сервер делать и ждать как раз ответа, так уж точно быстрее)
В данном случае да. Впрочем, сейчас такие вещи делаются на асинхронке (asyncio\aiohttp). Это экономней по ресурсам и дает тот же эффект псевдопараллельности.

P.S. По поводу потоков: вот очень грамотная статья(перевод с англ.).
Автор - Джим Андерсон (человек явно в теме и является известным программистом). В его блоге на realpython.com есть куча других интересных статей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2019, 13:04
Помогаю со студенческими работами здесь

Ожидание завершения потоков
Подскажите пж. как дождатся окончание выполнения потоков в unit-2 и потом продолжить в unit-3 чет не получается с условием так как в 22...

Ожидание конца выполнения скрипта
Имеется класс, в котором есть функция, время выполнения какой - около 5 минут Как можно обойти ожидание Сейчас реализован ajax...

Ожидание конца чтения из QTcpSocket
Схема работы такая: вызывается метод connect -> метод connect создаёт коннект к QTcpSocket -> идёт отправка в БД -> метод connect...

Ожидание завершения потоков, ExecutorService
Правила так правила. import java.util.Arrays; import java.util.Random; import java.util.concurrent.ExecutorService; import...

Ожидание завершения работы потоков
Доброго времени суток. Пишу прокси-чекер и для этого создаю запросы в новых потоках. Хочу дождаться выполнения всех потоков, для того чтобы...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru