Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 3
Регистрация: 10.03.2018
Сообщений: 150

Потоки, процессы и асинхронное программирование

16.12.2018, 19:32. Показов 2303. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Почитал документацию и по моему я только еще больше запутался.

Есть модуль Threadind - который подразумевает разделение программы на потоки. Т.е. задачи выполняются в параллельно друг другу. Перечитав кучу статей, понял что GIL не дает потокам выполнятся параллельно друг другу. вопрос - зачем нужен Threading если потоки все равно выполняются последовательно, т.е. следующий поток, прежде чем начать свою работу, ждет окончания работы текущего потока. Может быть я что то не так понял. В таком случае объясните пожалуйста для каких задач нужен модуль Threading?

Есть модуль multiprocessing - который для каждой задачи создает собственный процесс с выделением области в памяти. И каждая задача оперирует исключительно своими переменными. Для каких задач лучше использовать этот модуль?

Есть модуль asyncio - который создает очередь из задач и при простое(ожидании) текущей задачи переключается на выполнение следующей задачи, а потом снова возвращается к выполнению текущей задачи. В интернете пишут, что данный модуль необходим для того, что бы на уровне программы устанавливать очередность выполнение задач. Где лучше использовать этот модуль?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2018, 19:32
Ответы с готовыми решениями:

Асинхронное программирование
Не всегда включаюсь в тему асинхронного программирования, рассказали бы в краткой форме, достаточной для 2-3 минутного ответа на вопрос, в...

Асинхронное программирование в Python
Доброго времени суток. Столкнулся с проблемой что в коде вызывается функция которая ждёт условные 60 секунд, а после неё код эти же...

Паралельное программирование. Потоки и процессы
Здравствуйте. Помогите написать программу которая моделирует обслуживание двух потоков процессов с разными параметрами одним центральным...

9
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
20.12.2018, 13:46
Цитата Сообщение от kmvcf Посмотреть сообщение
Перечитав кучу статей, понял что GIL не дает потокам выполнятся параллельно друг другу. вопрос - зачем нужен Threading если потоки все равно выполняются последовательно, т.е. следующий поток, прежде чем начать свою работу, ждет окончания работы текущего потока. Может быть я что то не так понял. В таком случае объясните пожалуйста для каких задач нужен модуль Threading?
Популярный вопрос на собеседованиях, между прочим
Нужды могут быть различные. Например, сделать "отзывчивый" gui, пока выполняется некий долгий процесс (не в программном смысле). Применение 2 - когда потоки работают с внешними ресурсами. Они медленные, их приходится ждать, всё равно наша программа будет простаивать - так хоть запустим их параллельно, чтобы ждали одновременно.

Цитата Сообщение от kmvcf Посмотреть сообщение
Есть модуль multiprocessing - который для каждой задачи создает собственный процесс с выделением области в памяти. И каждая задача оперирует исключительно своими переменными. Для каких задач лучше использовать этот модуль?
Очевидно, на multiprocessing не распространяется ограничение GIL. То есть имеет смысл, когда надо по серьёзному загрузить все ядра.
0
1 / 1 / 3
Регистрация: 10.03.2018
Сообщений: 150
09.01.2019, 13:36  [ТС]
Если можно, то немного уточнений.
Задача заключается в следующем - я хочу написать web приложение на Pyhton, со следующей логикой:
Клиент отправляет в web приложение данные.
Web приложение получает данные и делает выборку из базы данных или из данных загруженных в память.
На основе выборки web приложение отправляет запрос на сторонний ресурс, получает ответ, обрабатывает его и в итоге отправляет клиенту результат своей работы.

Что лучше использовать для такой задачи?
Threadind
multiprocessing
asyncio

Какая библиотека будет потреблять больше/меньше ресурсов? и каких?
Какая библиотека сможет обработать больше/меньше всего запросов, за одинаковый период времени?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
09.01.2019, 14:06
aiohttp в тренде, лично я голосую за tornado
https://github.com/tornadoweb/... ster/demos
0
1 / 1 / 3
Регистрация: 10.03.2018
Сообщений: 150
09.01.2019, 15:18  [ТС]
Цитата Сообщение от vic5710 Посмотреть сообщение
aiohttp в тренде, лично я голосую за tornado
В целях самообразования не хочу использовать фреймворки.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.01.2019, 15:58
kmvcf, как я уже отметил, обычно для работы с внешними ресурсами используют threading или asyncio. Между ними уже сложнее выбрать, так что я лучше воздержусь от совета.
Но пока для вашей задачи я вообще не увидел, где там нужна многопоточность в каком бы то ни было виде. Разве что будете писать свой веб-сервер, но это вряд ли. А так - в рамках одного запроса многопоточность пока не просматривается, а одновременно рулить запросами будет программа-вебсервер.
0
1 / 1 / 3
Регистрация: 10.03.2018
Сообщений: 150
09.01.2019, 16:22  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Но пока для вашей задачи я вообще не увидел, где там нужна многопоточность в каком бы то ни было виде. Разве что будете писать свой веб-сервер, но это вряд ли. А так - в рамках одного запроса многопоточность пока не просматривается, а одновременно рулить запросами будет программа-вебсервер.
Задача была обрисована на примере одного клиента, а если их будет 100?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.01.2019, 16:28
kmvcf, ну так я вроде указал, что этим займётся программа-вебсервер.
0
1 / 1 / 3
Регистрация: 10.03.2018
Сообщений: 150
09.01.2019, 16:35  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
ну так я вроде указал, что этим займётся программа-вебсервер.
т.е. если есть вебсервер, то разделением на потоки будет заниматься он.
если вебсервера нет, то нужно писать свой вебсервер.
В таком случае как будет происходить взаимодействие:
Сервер принял 100 запросов.
Отправил данные 1 запроса моему приложению.
Мое приложение обрабатывает данные.
В этот момент сервер отправляет моему приложению 2 запрос. Но ведь мое приложение работает в один поток и он уже занят, разве не так?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.01.2019, 16:42
Лучший ответ Сообщение было отмечено kmvcf как решение

Решение

Цитата Сообщение от kmvcf Посмотреть сообщение
если вебсервера нет, то нужно писать свой вебсервер.
Что значит "нет"? Поставьте nginx, в крайнем случае apache. Можно uwsgi, для простых случаев. Оно вам надо - свой сервер писать? Лучше вы всё равно не напишете.
Цитата Сообщение от kmvcf Посмотреть сообщение
Сервер принял 100 запросов.
Отправил данные 1 запроса моему приложению.
Настроенный сервер сам будет запускать питоновские процессы и потоки, как нужно, абстрагируя вас от этой работы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2019, 16:42
Помогаю со студенческими работами здесь

Потоки: асинхронное обновление объектов на карте
Здравствуйте, разрабатываю приложение с картой, на карте есть объекты, которые постоянно должны обновлять. Как это сделать? Хочу сделать...

Потоки или асинхронное выполнение операции скачивания из Интернета
Здравствуйте, товарищи! Стоит задача выполнять операцию, но так, чтобы приложение не зависало. Написал такой код: Private IsGood...

Асинхронное программирование
Пожалуйста,помогите разобраться с правильным использованием async/await, перерыл много источников, но не понял как это работает.У меня есть...

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

Асинхронное программирование
Здравствуйте. Необходимо решить задачу обедающих философов (в виндосуформ, что бы при нажатии кнопки запускался поток, работал некоторое...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
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