ThreadPoolExecutor Python

Учебное пособие по Python Tkinter Программирование и разработка

ThreadPoolExecutor — это класс Python, который находится в его пакете с именем «concurrent.futures». Допустим, нам нужно создать много потоков в наших сильно распараллеленных заданиях. Это самое дорогое, потому что может возникнуть несколько проблем с эффективностью из-за большого количества процессов. Большой проблемой может быть то, что пропускная способность становится ограниченной. Вы можете решить эту проблему, создав пул потоков. Пул потоков — это набор предварительно созданных или неактивных процессов, ожидающих назначения работы. Всякий раз, когда необходимо выполнить значительный набор действий, обычно рекомендуется создание пула потоков для разработки новых процессов для каждого задания. Пул потоков может выполнять следующие задачи:

  • Как только процесс внутри пула потоков завершит свою обработку, его можно будет использовать снова.
  • Когда поток заканчивается, новый поток формируется, чтобы занять его место.

Пакет concurrent.futures является частью обычной библиотеки Python. В Python 3.2 этот пакет был создан, чтобы предоставить программистам расширенный интерфейс для запуска параллельных процессов. Это промежуточный уровень, построенный поверх многозадачности Python, а также многопроцессорных пакетов, который позволяет вам выполнять задачи, используя пул потоков или процедур. В этой статье мы рассмотрим класс исполнителя пула потоков и его функции.

Пример 1

Давайте посмотрим на класс исполнителя пула потоков в нашем коде Python. Во-первых, мы использовали пакет «concurrent.futures», используя ключевое слово «from» в первой строке для импорта класса «ThreadPoolExecutor» в код. После этого мы инициализировали список из 4 чисел. Первая функция — это определяемая пользователем функция с именем «квадрат», и она будет вычислять квадрат значения, переданного в ее аргументах. Другой метод — это функция-конструктор, т. е. метод main(), поскольку выполнение начинается с i. Итак, определяемая пользователем функция «квадрат» определяется с помощью ключевого слова «def» и принимает значение аргумента для вычисления своего квадрата.

Скобки «{}» используются для получения числового значения переменной «z» вместо «z» в качестве строки здесь. Символ «f» перед текстом и оператором вычисления показывает, что значения будут приняты как числа с плавающей запятой, и будет рассчитан их квадрат. Оператор печати использует этот формат для получения квадрата и его печати в выходной оболочке Spyder3. А вот и конструктор функции main(). Конструктор инициализирует пустой список с именем «val». Пришло время использовать класс ThreadPoolExecutor, чтобы создать пул из 5 потоков для асинхронного использования.

Читайте также:  Как проверить версию Java в Linux Ubuntu?

Для этого используйте оператор «with» с именем «ThreadPoolExecutor», принимающий аргумент «max_workers» со значением 5. Вы можете видеть его как цикл, каждый раз принимающий 1 значение. Функция отправки класса ThreadPoolExecutor используется для выполнения функции, т. е. «квадрата», и дает квадрат переданного ей числа. Он берет число 1 в качестве начального значения для квадратного метода, и после этого он будет принимать значения из списка «l». Функция «карта» используется здесь для быстрого преобразования функции и итерации вместе как одного и вызывает ошибку в пакете «concurrent.futures». Исключение будет сохранено в переменной «val», а оператор печати будет использоваться для отображения этого исключения, используемого в цикле «for», на экране вывода.

from concurrent.futures import ThreadPoolExecutor
= [2,3,4,5]
def square(z):
print(f‘Square of {z}: {z*z}’)
if __name__ == ‘__main__’:
val =[]
with ThreadPoolExecutor(max_workers=5) as exe:
exe.submit(square,1)
val = exe.map(square,l)
for res in val:
print(res)

Пул из 5 потоков был создан для вычисления квадрата 5 значений, начиная с 1 до 5, как показано в выходных данных.

Пул из 5 потоков был создан для вычисления квадрата 5 значений

Пример 2

Вот последний пример использования класса ThreadPoolExecutor в коде Python. Итак, мы начали эти новые примеры с импорта класса, используя его пакет «concurrent.futures». Затем инициализируйте переменную «сумма» со значением 0. Пользовательская функция с именем «Процесс» объявлена ​​с аргументом «n». Эта функция печатает номера потоков с помощью оператора печати. Номер потока суммируется с цифрой 5, добавленной к переменной «сумма». Эта рассчитанная сумма для каждого потока будет отображаться на выходе с использованием оператора печати. Определение основного метода было начато здесь. Он использует ThreadPoolExecutor для создания пула из 3 потоков. Функция «Обработка» была вызвана 3 раза с использованием функции «отправить» для 3 разных значений. После того, как все потоки метода Process будут выполнены, он отобразит сообщение о завершении. После этого используется объявление функции main().

from concurrent.futures import ThreadPoolExecutor
Sum = 0
def Process(n):
print(«Processing the thread : {}».format(n))
Sum = n + 5
print(«Sum of {} and 5 is: «.format(n) , Sum)
def main():
print(«Starting ThreadPoolExecutor»)
with ThreadPoolExecutor(max_workers=3) as ex:
val = ex.submit(Process, (2))
val = ex.submit(Process, (4))
val = ex.submit(Process, (5))
print(«All the threads are processed completely»)

if __name__ == ‘__main__’:
main()

Выполнение показывает, что пул запущен, и отображается каждый номер потока с его суммой с номером 5.

Выполнение показывает, что пул запущен, и ото

Вывод

Мы рассмотрели и обсудили класс ThreadPoolExecutor и все его возможные функции в наших примерах. Мы должны сделать его максимально неприхотливым для наших пользователей. Также рассмотрели карту и функцию отправки. Мы ожидаем лучшего ответа.

Оцените статью
bestprogrammer.ru
Добавить комментарий