<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Программирование on 🕸</title>
    <link>https://prs2rnn.github.io/blog/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/</link>
    <description>Recent content in Программирование on 🕸</description>
    <generator>Hugo</generator>
    <language>ru-ru</language>
    
    
    
    <copyright>Copyright © 2026, prs2rnn.</copyright>
    
    
    <lastBuildDate>Thu, 02 Apr 2026 23:49:32 +0500</lastBuildDate>
    
    
    <atom:link href="https://prs2rnn.github.io/blog/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tools I Use</title>
      <link>https://prs2rnn.github.io/uses/</link>
      <pubDate>Wed, 11 Mar 2026 20:02:11 +0500</pubDate>
      <guid>https://prs2rnn.github.io/uses/</guid>
      <description>&lt;h1 id=&#34;what-i-use&#34;&gt;What I use:&lt;/h1&gt;&#xA;&lt;h2 id=&#34;hardware&#34;&gt;Hardware&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Silent PC &lt;strong&gt;Modern 14&lt;/strong&gt; - C12M&lt;/li&gt;&#xA;&lt;li&gt;Silent Mobile Phone &lt;strong&gt;Phillips Xenium X170&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Windows 10&lt;/strong&gt; как основную ОС&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt; для заметок&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Git Bash&lt;/strong&gt; и &lt;strong&gt;Power shell&lt;/strong&gt; для командных утилит&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Neovim&lt;/strong&gt; и &lt;strong&gt;VSCodium&lt;/strong&gt; для редактирования текста и кода&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Excel&lt;/strong&gt; с &lt;strong&gt;PowerQuery&lt;/strong&gt; для работы с данными&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hugo&lt;/strong&gt; для блога&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anki&lt;/strong&gt; для изучения English&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Torrent&lt;/strong&gt; для &lt;a href=&#34;https://prs2rnn.github.io/p/%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B8/&#34;&gt;музыки&lt;/a&gt;, &lt;a href=&#34;https://prs2rnn.github.io/p/%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B5%D0%BD%D1%8C-%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D0%BE%D0%B2/&#34;&gt;фильмов&lt;/a&gt; и иногда &lt;a href=&#34;https://prs2rnn.github.io/p/%D0%BA%D0%BD%D0%B8%D0%B6%D0%BD%D0%B0%D1%8F-%D0%BF%D0%BE%D0%BB%D0%BA%D0%B0/&#34;&gt;книг&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;KeepassXC&lt;/strong&gt; для хранения паролей&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gnupg&lt;/strong&gt; и &lt;strong&gt;VeraCrypt&lt;/strong&gt; для шифрования&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Photoshop CS6&lt;/strong&gt; для редактирования изображений&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Firefox&lt;/strong&gt; и &lt;strong&gt;Tor Browser&lt;/strong&gt; для доступа в интернет&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; для написания алгоритмов&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;services&#34;&gt;Services&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt; для хостинга&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Алиса GPT&lt;/strong&gt; как ИИ-ассистент&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Разработка</title>
      <link>https://prs2rnn.github.io/portfolio/</link>
      <pubDate>Thu, 02 Apr 2026 23:49:32 +0500</pubDate>
      <guid>https://prs2rnn.github.io/portfolio/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/prs2rnn/quickpass&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;QuickPass&lt;/a&gt; - наипростейший генератор паролей с консольным интерфейсом, написанный с использованием встроенной библиотеки Python3&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Асинхронность как основной подход к разработке высоконагруженных приложений</title>
      <link>https://prs2rnn.github.io/p/%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%BA%D0%B0%D0%BA-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B9-%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4-%D0%BA-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5-%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9/</link>
      <pubDate>Wed, 03 May 2023 00:00:00 +0000</pubDate>
      <guid>https://prs2rnn.github.io/p/%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%BA%D0%B0%D0%BA-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B9-%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4-%D0%BA-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5-%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9/</guid>
      <description>&lt;p&gt;В данной статье освещаются основные подходы к современной разработке высоконагруженных приложений, в частности, предоставляющие основной интерфейс для взаимодействия с пользователем при помощи браузера или иного клиента, в функционал которого заложена отправка http запросов к серверу.&lt;/p&gt;&#xA;&lt;h2 id=&#34;введение&#34;&gt;Введение&lt;/h2&gt;&#xA;&lt;p&gt;Понятие высоконагруженного приложения можно интерпретировать как любое приложение или сервис, обслуживающий большое количество одновременных запросов. Результатом данного события является значительная нагрузка на системные ресурсы, такие как использование процессора, потребление памяти, пропускная способность сети и т.д. В соответствии с этими ограничениями возникает вопрос: как обеспечить эффективную и надежную работу при высоких нагрузках?&lt;/p&gt;&#xA;&lt;p&gt;­­­&#xA;Об основных подходах и существующих стратегиях, которые повсеместно используются на этапе проектирования будет рассказано далее. А теме асинхронности как одному из лучших прикладных подходов в проектировании веб-приложений и не только уделяется большая часть материала.&lt;/p&gt;&#xA;&lt;h2 id=&#34;основные-термины&#34;&gt;Основные термины&lt;/h2&gt;&#xA;&lt;p&gt;Прежде чем приступить к рассмотрению общепринятых методов проектирования, необходимо дать понятия базовым сущностям, которые напрямую связаны с процедурой разработки.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Процесс&lt;/strong&gt; ­ запущенная программа и ее данные в памяти. Программа может запускать свои дочерние процессы, для которых предоставляется отдельное место в памяти. Для одного процесса операционная система выделяет пул ресурсов, включая виртуальную память, т.е. память использующуюся, когда программе требуется более того числа оперативной памяти, что есть на компьютере, путем перемещения частей программы на жесткий диск. В эту область памяти загружается транслятор, код и другие необходимые для него компоненты. Этот процесс реализуется автоматически, поэтому не требует никаких усилий от программиста, только аппаратной поддержки от ОС.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Thread&lt;/strong&gt; – поток выполнения программы, т.е. основные части алгоритма, которые выполняются последовательно при запуске программы. Thread является частью процесса.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;GIL&lt;/strong&gt; (глобальная блокировка интерпретатора) ­ способ синхронизации потоков, который используется в некоторых интерпретируемых языках программирования, например в Python и Ruby.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Синхронность&lt;/strong&gt; – концепция по умолчанию, когда каждая последующая операция ожидает окончания предыдущей и не может быть выполнена наперед.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Виды операций:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;IO-bound&lt;/em&gt; – означает, что скорость выполнения ограничена скоростью ввода/вывода. Например, запись на диск или запрос на сервер.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;CPU-bound&lt;/em&gt; – означает, что скорость выполнения ограничена характеристиками CPU и оперативной памятью.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;многопроцессорность&#34;&gt;Многопроцессорность&lt;/h2&gt;&#xA;&lt;p&gt;Представим, что пользователь локально запускает несколько приложений совместно с теми процессами, которые необходимы для функционирования самой системы, и в результате работы переключается между ними. В данном примере при наличии одноядерного CPU с архитектурой x86 каждый процесс будет выполняться отдельно друг от друга, каждый раз переключаясь между собой. Скорость этих переключений будет зависеть от тактовой частоты – характеристикой CPU наравне с битностью (число бит, которым процессор может обмениваться с оперативной памятью за подход). Чем выше частота, тем быстрее работает процессор, поэтому скорость переключений будет выше.&lt;/p&gt;&#xA;&lt;p&gt;Проблема здесь заключается в увеличении времени ожидания при большом количестве переключений, и чтобы скорость работы оставалась высокой, необходимо увеличить частоту, что может быть экономически очень затратно. Поэтому в современных процессорах реализовано несколько ядер, каждое из которых может отдельно выполнять свои задачи, т.е. при наличии многоядерного CPU процессы могут работать одновременно. Например, при наличии четырехъядерного CPU параллельно могут работать четыре процесса.&lt;/p&gt;&#xA;&lt;h2 id=&#34;многопоточность&#34;&gt;Многопоточность&lt;/h2&gt;&#xA;&lt;p&gt;Логика выполнения программы может быть разбита на несколько потоков в рамках одного процесса совместно с основным потоком, который выполняет ОС. В таком случае потоки будут разделять один пул ресурсов, выделенный ОС. Такая возможность позволяет реализовать одновременно дополнительные вычисления, которые будут выполняться на разных потоках выполнения. В свою очередь, разные потоки могут быть разбиты по разным процессорным ядрам, что повышает производительность и позволяет эффективно задействовать аппаратную часть компьютера. Например, 4 потока на одно ядро совместно с четырьмя разными процессами, каждый из которых выполняется одним из четырех ядер.&lt;/p&gt;&#xA;&lt;p&gt;Не вдаваясь в детали взаимодействия вычислительных мощностей CPU и потоков, стоит упомянуть о главных недостатках такого подхода в целом.&lt;/p&gt;&#xA;&lt;p&gt;Во-первых, в большинстве случаев нельзя реализовать 1000 потоков, чтобы сервер мог одновременно обслуживать 1000 человек, т.к. это требует большого количества процессорных ядер, что экономически невыгодно. А наличие меньшего числа потоков может привести к таймаутам, возникающих на стороне клиентов, которые ожидают, когда очередь сервера дойдет до них, если очередь есть.&lt;/p&gt;&#xA;&lt;p&gt;Во-вторых, при проектировании серверной части с использованием таких языков как JavaScript или Python3, в частности такой его реализацией как CPython, многопоточность не может быть реализована в силу архитектурных особенностей данных ЯП. В CPython присутствует т.н. Global Interpreter Lock, который блокирует интерпретатор при выполнении нескольких потоков. Без GIL CPU-bound операции выполнялись бы в 25 раз медленнее.&lt;/p&gt;&#xA;&lt;h2 id=&#34;асинхронность&#34;&gt;Асинхронность&lt;/h2&gt;&#xA;&lt;p&gt;Наличие GIL в CPython никак не мешает использовать данный ЯП в качестве основного инструмента при проектировании серверной части высокоэффективных веб-приложений. Добиться этого позволяет такая концепция программирования как асинхронность.&lt;/p&gt;&#xA;&lt;p&gt;Здесь уместно упомянуть о синхронном программировании, главными недостатками которого являются риск остановки всей программы при наличии большого времени ожидания одной операции, а также невозможность эффективно использовать то время, когда программа выполняет какую-либо логику, например, получает данные из базы или стороннего API или производит сложные вычисления. В таком случае пользователь веб-сайта во время получения каких-либо данных не смог бы перемещаться в пределах данной страницы во время выполнения запроса.&lt;/p&gt;&#xA;&lt;p&gt;Представим, что сервер полностью обрабатывает запрос за 300 мс, в рамках этого времени 100 мс он получает ответ из базы данных, а остальные 200 мс ожидает. Асинхронность или по-другому кооперативная многозадачность и позволяет серверу заполнить эти 200 мс чем-то полезным, в т.ч. обрабатывать параллельные запросы в достаточно большом количестве при отсутствии больших вычислительных мощностей.&#xA;Асинхронный код работает в рамках одного процесса и в рамках одного потока, убирает блокирующую операцию из основного потока выполнения, позволяя выполнять следующую операцию, ставя предыдущую на второй план, не блокируя процесс ее выполнения. В том числе, можно запустить четыре процесса программы, где каждое ядро выполняет один процесс и один поток, который в свою очередь выполняет несколько операций одновременно, что еще больше повышает эффективность работы.&lt;/p&gt;&#xA;&lt;p&gt;Стоит понимать, что асинхронность реализуется на уровне ОС, которая предоставляет необходимые сокеты, а синтаксис и способы работы с отдельными субъектами отличаются в разных ЯП.&lt;/p&gt;&#xA;&lt;p&gt;Для большего понимания абстракции и концепции асинхронного подхода, необходимо разобрать основные сущности, участвующие в работе, посредством практической реализации небольшого мысленного эксперимента и скрипта.&lt;/p&gt;&#xA;&lt;p&gt;Представим, что мальчик Петя на летние каникулы уехал отдыхать к бабушке в деревню со списком литературы для чтения. Каждая книга из списка является задачей (task), также у Пети может быть свой список дел, которые он хочет выполнить: сходить в лес за грибами, пойти с дедом на охоту и подстрелить фазана, искупаться в озере минимум 50 раз за лето и т.д. Т.к. Петя живет в нормальном асинхронном мире, он может заниматься своими делами в любом порядке, прерываясь по мере необходимости, т.е. может доделать что-то, оставленное на потом. В рамках этого мысленного эксперимента циклом событий (event loop) является Петя, он управляет задачами, пробегается по каждой из них и проверяет, какая из них выполнена. Задачи могут иметь за собой некий алгоритм работы, иными словами, быть функциями, данные функции называются сопрограммами (coroutine), а задачами становятся, когда передаются циклу событий и стоят в очереди на выполнение. Таким образом, в процессе участвуют три сущности: цикл событий, сопрограмма, задача.&lt;/p&gt;&#xA;&lt;p&gt;Не вдаваясь в подробности синтаксиса ЯП Python3, реализуем две программы и сравним время выполнения каждой. Они обе будут выполнять одни и те же IO-bound задачи – имитировать выполнение какой-либо операции в течение 1 секунды, генерировать 10 случайных строк, каждая из которых представляет собой информацию о пользователях некоего интернет-ресурса, и записывать их в файл формата CSV.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Синхронный код:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; csv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; time&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;from&lt;/span&gt; time &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; monotonic&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;from&lt;/span&gt; faker &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; Faker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 7&lt;/span&gt;&lt;span&gt;faker = Faker(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;ru_RU&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;def&lt;/span&gt; make_user(uid: &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;int&lt;/span&gt;) -&amp;gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;dict&lt;/span&gt;[&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;str&lt;/span&gt;, &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;str&lt;/span&gt; | &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;int&lt;/span&gt;]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;11&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Функция, имитирующая выполнение какой-либо операции&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    и создающая словарь, значения которого будут переданы&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    в объект DictWriter и записаны в файл&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;15&lt;/span&gt;&lt;span&gt;    time.sleep(&lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;16&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;return&lt;/span&gt; {&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;id_user&amp;#34;&lt;/span&gt;: uid, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: faker.name(), &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: faker.email()}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;17&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;18&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;def&lt;/span&gt; main() -&amp;gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;20&lt;/span&gt;&lt;span&gt;    tasks = (make_user(i) &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;11&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;21&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;open&lt;/span&gt;(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;users.csv&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;, encoding=&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;as&lt;/span&gt; file:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;22&lt;/span&gt;&lt;span&gt;        headings = &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;id_user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;23&lt;/span&gt;&lt;span&gt;        writer = csv.DictWriter(file, headings)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;24&lt;/span&gt;&lt;span&gt;        start = monotonic()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;25&lt;/span&gt;&lt;span&gt;        writer.writerows(tasks)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;26&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;Uptime = &lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;{&lt;/span&gt;monotonic() - start&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt; sec&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;27&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;28&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;if&lt;/span&gt; __name__ == &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;30&lt;/span&gt;&lt;span&gt;    main()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Асинхронный код:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; asyncio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; csv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;from&lt;/span&gt; time &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; monotonic&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;from&lt;/span&gt; faker &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;import&lt;/span&gt; Faker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 7&lt;/span&gt;&lt;span&gt;faker = Faker(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;ru_RU&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;def&lt;/span&gt; make_user(uid: &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;int&lt;/span&gt;) -&amp;gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;dict&lt;/span&gt;[&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;str&lt;/span&gt;, &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;str&lt;/span&gt; | &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;int&lt;/span&gt;]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;11&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Корутина, имитирующая выполнение какой-либо операции&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    и создающая словарь, значения которого будут переданы&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    в объект DictWriter и записаны в файл&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;15&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;await&lt;/span&gt; asyncio.sleep(&lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;16&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;return&lt;/span&gt; {&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;id_user&amp;#34;&lt;/span&gt;: uid, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: faker.name(), &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: faker.email()}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;17&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;18&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;def&lt;/span&gt; main() -&amp;gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;20&lt;/span&gt;&lt;span&gt;    tasks = (asyncio.create_task(make_user(i)) &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ff0;font-weight:bold&#34;&gt;11&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;21&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;open&lt;/span&gt;(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;users.csv&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;, encoding=&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;as&lt;/span&gt; file:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;22&lt;/span&gt;&lt;span&gt;        headings = &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;id_user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;23&lt;/span&gt;&lt;span&gt;        writer = csv.DictWriter(file, headings)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;24&lt;/span&gt;&lt;span&gt;        start = monotonic()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;25&lt;/span&gt;&lt;span&gt;        writer.writerows(&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;await&lt;/span&gt; asyncio.gather(*tasks))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;26&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;Uptime = &lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;{&lt;/span&gt;monotonic() - start&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt; sec&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;27&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;28&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#fff;font-weight:bold&#34;&gt;if&lt;/span&gt; __name__ == &lt;span style=&#34;color:#0ff;font-weight:bold&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;30&lt;/span&gt;&lt;span&gt;    asyncio.run(main())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Результат обеих программ представлен ниже. Их главное отличие во времени работы. Первой синхронной программе на выполнение понадобилось 10 секунд, что отображается в консоли по завершении, а второй асинхронной – 1 секунда (к слову, можно записать и 1000 строк за это то же время).&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 1&lt;/span&gt;&lt;span&gt;1,Эрнст Федосьевич Комаров,matveevanisim@example.net&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 2&lt;/span&gt;&lt;span&gt;2,Осип Ермолаевич Захаров,lukjan_92@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 3&lt;/span&gt;&lt;span&gt;3,Трифон Вячеславович Овчинников,selivan2007@example.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 4&lt;/span&gt;&lt;span&gt;4,Виктор Елисеевич Сорокин,filippovroman@example.net&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 5&lt;/span&gt;&lt;span&gt;5,Зуева Людмила Николаевна,milen_1973@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 6&lt;/span&gt;&lt;span&gt;6,Кузьмин Климент Гавриилович,kostinanaina@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 7&lt;/span&gt;&lt;span&gt;7,Чернов Самсон Гавриилович,galkinafevronija@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 8&lt;/span&gt;&lt;span&gt;8,Кузьмин Автоном Феодосьевич,avgust_1970@example.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt; 9&lt;/span&gt;&lt;span&gt;9,Шестакова Синклитикия Викторовна,foma1982@example.net&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#727272&#34;&gt;10&lt;/span&gt;&lt;span&gt;10,Агата Сергеевна Белякова,nikitinadam@example.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Данные примеры лишь иллюстрируют принцип работы асинхронности при написании программ, требующих большую скорость работы в конкретный момент.&lt;/p&gt;&#xA;&lt;h2 id=&#34;заключение&#34;&gt;Заключение&lt;/h2&gt;&#xA;&lt;p&gt;В данной работе были рассмотрены использующиеся разработчиками основные методы проектирования приложений, которые позволяют создавать надежные сервисы, способные справиться даже с самой высокой нагрузкой и обеспечить оптимальную производительность для конечных пользователей.&lt;/p&gt;&#xA;&lt;p&gt;Важно упомянуть, что на этапе реализации так же существуют специальные стратегии и способы, позволяющие эффективно управлять ограничениями ресурсов. К примеру, это использование механизмов кэширования для сокращения количества запросов к базе данных, развертывание нескольких серверов для обработки запросов, оптимизация кода для повышения эффективности. Совместно с внедрением алгоритмов распределения нагрузки и использованием асинхронных моделей программирования можно создавать действительно производительные и более совершенные IT продукты.&lt;/p&gt;&#xA;&lt;h2 id=&#34;список-источников&#34;&gt;Список источников&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.amazon.com/Python-Concurrency-asyncio-Matthew-Fowler/dp/1617298662&#34;&gt;Фаулер М. Asyncio и конкурентное программирование на Python&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://realpython.com/async-io-python/&#34;&gt;Async IO in Python: A Complete Walkthrough – Real Python&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
    </item>
  </channel>
</rss>