@ru_python

Страница 3110 из 9768
Centrino
05.07.2017
14:44:14
если поток один, то откуда ускорение?

Nikolay
05.07.2017
14:45:08
суть корутин в том, что поскольку они управляют переключением контекста сами (yield/await явно возвращает управление, это называется кооперативная многозадачность), то и проблем многих с блокировками, которые присущи многопоточному программированию, у них нет

Маришка
05.07.2017
14:45:42
Nikolay
05.07.2017
14:46:12
если поток один, то откуда ускорение?
ускорение оттуда, что 1) тебе не нужен системный шедулер ждать для управления тредами, 2) твоя программа "проматывает" состояние корутин до нового исходя из событий, которые к ней извне приходят

Google
Nikolay
05.07.2017
14:46:19
например, из сокетов

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

Centrino
05.07.2017
14:47:32
то есть я не смогу получить ускорения, если вместо тредов, буду использовать корутины, например для вычислений в самом питон-коде?

Nikolay
05.07.2017
14:48:52
другое дело, что зачем тебе программа, которая никак не взаимодействует с внешним миром?

Centrino
05.07.2017
14:49:14
например, 10 больших факториалов. Тогда взять треды, да?

Artem
05.07.2017
14:49:27
Nikolay
05.07.2017
14:49:33
например, 10 больших факториалов. Тогда взять треды, да?
тогда тебе не надо писать этот код на чистом питоне вообще

тогда ты берешь тот же scipy, который написан на сях

Centrino
05.07.2017
14:49:47
а в чем разница в питоне между тредами и потоками? есть разные библиотеки для того и другого

Nikolay
05.07.2017
14:49:51
и просто дергаешь из него нужные методы

concurrent.futures и threading - это просто два разных интерфейса

Google
Aleksandr
05.07.2017
14:50:22
то есть я не смогу получить ускорения, если вместо тредов, буду использовать корутины, например для вычислений в самом питон-коде?
корутины сами по себе дают совместность, но если ты используешь блокирующие операции в них то ты не получишь конкурентости для i/o, а именно она и является тормозом в сетевых задачах если речь о вычислениях то они должны производиться за пределами интерпретатора

Nikolay
05.07.2017
14:50:56
и да, суть вызова сишных либ в том, что, когда ты исполняешь их код, а не питоновый - отпускается GIL

Маришка
05.07.2017
14:51:09
да начнётся срач, пришёл Александр

Nikolay
05.07.2017
14:51:21
(это помимо того, что сами сишные либы работают на порядок быстрее, чем питонокод, чаще всего)

Centrino
05.07.2017
14:51:25
пытаюсь понять как работает корутина в одном потоке, осмыслить

Nikolay
05.07.2017
14:51:35
да начнётся срач, пришёл Александр
да мы не сремся, больше друг друга дополняем)

это цикл, который слушает события, которые к нему приходят от операционки

Centrino
05.07.2017
14:52:15
yield я пишу, функция возвращает результат и дальше выполняться продолжает. А как же тот, кто ждет его ответа?

Nikolay
05.07.2017
14:52:41
соответственно, ты можешь этому лупу сказать, чтобы в качестве реакции на разные типы событий он тебе дергал разный код

Маришка
05.07.2017
14:52:52
yield я пишу, функция возвращает результат и дальше выполняться продолжает. А как же тот, кто ждет его ответа?
как только future вернёт то что корутина может продолжать, она становится в очередь исполнения

Aleksandr
05.07.2017
14:52:53
а в чем разница в питоне между тредами и потоками? есть разные библиотеки для того и другого
дело в том что конкретно в питоне есть узкое горлышко принципиально меняющее смысл потоков. потоки могут быть полноценными и параллельными в момент когда они не нуждаются в общении с интерпретатором питона. так работают все вычисления в питоне, они считают все что нужно в сторонке а потом берут GIL и отдают тебе в питон данные.

Nikolay
05.07.2017
14:52:56
она запоминает, где остановилась, и возвращает временно управление

то есть корутины постоянно помнят, где остановились, и просто друг другу из рук в руки передают текущий поток выполнения

Centrino
05.07.2017
14:54:32
спасибо, кажется я начинаю понимать

смотрел это видео

Nikolay
05.07.2017
14:55:12
спасибо, кажется я начинаю понимать
с асинхронностью в питоне в текущем виде тебе надо помнить всегда о нескольких вещах

Centrino
05.07.2017
14:55:16
но моего анлийского не хватает

Google
Nikolay
05.07.2017
14:55:44
первая - тебе надо руками создавать объект эвентлупа всегда в текущем потоке. Если у тебя потоков несколько (что редко нужно, но тем не менее) - то в каждом отдельно свой луп.

вторая - если ты объявляешь функцию, как async, то она не должна дергать ничего из того, что долго и синхронно выполняется, внутри себя, потому что это не позволит ей передать управление дальше и завесит весь процесс целиком

соответственно, ты можешь "зааутсорсить" долгую процедуру, запустив ее в отдельном потоке (если она совсем чисто I/O Bound) или процессе (если там есть много питонокода, который может попасть под GIL)

это делается с помощью вызова asyncio.run_in_executor()

в других языках подобные вещи реализованы иначе немного, скажем, в го вообще нет разницы между синхронным и асинхронным кодом (не надо явно объявлять функции асинхронными и нет GIL), поэтому там о таких вещах можно вообще не думать обычно

в питоне чуть сложнее, но, в целом, если примерно вникнешь, как оно работает - то нормально

ну и да, корутины всегда запускаются ТОЛЬКО в лупе

Makc
05.07.2017
15:01:36
можно как-то запретить setuptools исколькозать easy_install?

Nikolay
05.07.2017
15:02:05
можно как-то запретить setuptools исколькозать easy_install?
можно ли как-нибудь в мейкфайле запретить команду make?

поясни вопрос

Makc
05.07.2017
15:02:29
easy_install != setuptools

Centrino
05.07.2017
15:02:50
поясни вопрос
спасибо, надо подумать над твоими словами

Nikolay
05.07.2017
15:03:00
easy_install != setuptools
setuptools - это модуль для питона, который ты используешь при написании setup.py

Makc
05.07.2017
15:03:17
Сетаптулс используется для подтягивания ависимостей easy_install, что неприемлимо в моём случае

Nikolay
05.07.2017
15:03:18
спасибо, надо подумать над твоими словами
это я уже Максу отвечал :) но у тебя если есть еще вопросы - пиши

Сетаптулс используется для подтягивания ависимостей easy_install, что неприемлимо в моём случае
easy_install - это всего лишь скрипт, который запускает твой код через setuptools. pip тоже запускает твой код через setuptools

Centrino
05.07.2017
15:04:07
это я уже Максу отвечал :) но у тебя если есть еще вопросы - пиши
у меня не вопросы, у меня отсутствие понимание картины мира и питона, в частности

Centrino
05.07.2017
15:04:40
да. Надо еще дома будет покодить примеры какие-нибудь

Makc
05.07.2017
15:05:44
Easy Install is a python module (easy_install) bundled with setuptools that lets you automatically download, build, install, and manage Python packages.

Google
Makc
05.07.2017
15:06:22
Причем интерфейсы взаимодействия с pypi у низ разные

Nikolay
05.07.2017
15:06:25
ты давай лучше расскажи, какую задачу решить пытаешься

Makc
05.07.2017
15:06:29
Насколько я понимаю

Nikolay
05.07.2017
15:06:36
чтобы зависимости не качались или что?

Makc
05.07.2017
15:06:52
Есть локальный pypi

Nikolay
05.07.2017
15:06:59
pypiserver?

Makc
05.07.2017
15:07:06
arifactory

Nikolay
05.07.2017
15:07:11
окей

Admin
ERROR: S client not available

Makc
05.07.2017
15:07:32
Который судя по всему не поддерживает easy_install index

Nikolay
05.07.2017
15:08:07
в артефактах хранится информация об их зависимостях?

то есть ты можешь одной командой скачать пакет и все его зависимости в папочку?

Makc
05.07.2017
15:08:37
Причём тут зависимости?

Nikolay
05.07.2017
15:09:10
тебе надо, чтобы зависимости пакета тянулись из артифактори, а не искались на pypi, так?

или нет?

Makc
05.07.2017
15:09:37
дело в том что если я указываю [easy_install] index_url = https://art.company.ru/pypi/simple/

То он вообще не может оттуда притянуть пакеты

В отличае от pip

Nikolay
05.07.2017
15:10:36
ну да, в общем случае easy_install и не нужен нафиг, если есть pip

Google
Nikolay
05.07.2017
15:11:41
для pip ты можешь сделать ~/.pip/pip.conf, в котором указать кастомные урлы

Makc
05.07.2017
15:12:11
Это и так понятно.

Теперь можно вренутся к первому вопросу

setuptools по умолчанию использует easy_install

Nikolay
05.07.2017
15:13:24
setuptools по умолчанию использует easy_install
я не понимаю смысл это фразы

у тебя есть setup.py

чем ты его запустишь - тем он и будет дергаться

Makc
05.07.2017
15:13:48
делая python setup.py test

Nikolay
05.07.2017
15:14:27
делая python setup.py test
а ты не делай, сделай через pytest

Makc
05.07.2017
15:14:33
если у тебя есть tests_requires ты так или иначе будешь их тянуть easy_install ом

Nikolay
05.07.2017
15:14:42
а тьфу

понял

ну, ты можешь просто тесты по-другому запускать

это будет самое простое решение

Makc
05.07.2017
15:16:35
Это по меньшей мере странно.

Nikolay
05.07.2017
15:16:44
почему?

ты можешь пакет поставить одним инсталлятором или другим

Makc
05.07.2017
15:17:32
Ну учитывая что setuptools стандарт для задач дистрибуции

Nikolay
05.07.2017
15:18:18
а вот и ответ на твой вопрос

https://www.jfrog.com/jira/browse/RTFACT-8216

вкратце "юзай pip"

Makc
05.07.2017
15:18:45
Это вопрос на мой вопрос скорее)

Страница 3110 из 9768