Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
4
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Выводы    259

t.join()

while not results.empty():

print("Port {0} is open".format(results.get())) print("Completed scan in {0} seconds".format(time.time() - start))

Из-за снижения затрат по сравнению с многопроцессной обработкой этот пример должен выполняться на 30–40 % быстрее и с меньшими затратами памяти:

$ python portscanner_subinterpreters.py Port 80 is open

Completed scan in 1.3474230766296387 seconds

ВЫВОДЫ

Поздравляю, вы осилили самую большую главу в книге! В ней был рассмот­ рен нешуточный объем материала. Давайте вспомним некоторые концепции и их применения.

Для полноценного параллельного выполнения понадобится несколько процессоров или ядер. Также необходимо использовать пакет multiprocessing или subinterpreters, чтобы интерпретатор Python мог выполняться параллельно.

Не забывайте, что время запуска весьма значительно, а каждый интерпретатор создает существенные затраты памяти. Если задачи, которые нужно выполнить, имеют короткий срок жизни, используйте пул воркеров и очередь задач.

Если у вас несколько задач с интенсивным вводом/выводом, которые должны выполняться одновременно (конкурентно), используйте многопоточное решение или сопрограммы с пакетом asyncio.

При всех четырех подходах необходимо понимать, как безопасно и эффективно передавать данные между процессами или потоками. Если вы захотите закрепить материал этой главы, рассмотрите написанное вами приложение и подумайте, как провести его рефакторинг с применением этих методов.

Книги для программистов: https://t.me/booksforits