
Nikolay
03.07.2017
22:46:46
добро пожаловать в мир питона

Aleksandr
03.07.2017
22:47:02

Nikolay
03.07.2017
22:47:06
который пока что не умеет то, что умеет go

Google

Nikolay
03.07.2017
22:47:15
но, надеемся, когда-нибудь научится

Aleksandr
03.07.2017
22:47:25
concurrency is not parallelism

Nikolay
03.07.2017
22:47:51

Aleksandr
03.07.2017
22:47:56
паралелизма у потоков нет из-за GIL, но новый GIL делает потоки конкурентными

Nikolay
03.07.2017
22:47:56
никакого "делает конкурентными" там нет и в помине

Aleksandr
03.07.2017
22:48:47

Nikolay
03.07.2017
22:49:11
race conditions возможны в питоне на отличненько даже при GIL

Aleksandr
03.07.2017
22:53:20

Google

Aleksandr
03.07.2017
22:53:39
да, так апач делал, версии 1.*, отличный вариант же

Nikolay
03.07.2017
22:53:46
сишный код притом, что на него не действует GIL - это раз

Aleksandr
03.07.2017
22:54:06

Nikolay
03.07.2017
22:54:22
асинхронная работа с сокетом связана с потоками чуть более, чем никак - два

Aleksandr
03.07.2017
22:55:22

Nikolay
03.07.2017
22:55:39
эти понятия вообще между собой практически не связаны

Aleksandr
03.07.2017
22:55:47
coroutine AbstractEventLoop.run_in_executor, посмотри для чего это сделано

Nikolay
03.07.2017
22:56:09

Aleksandr
03.07.2017
22:56:51
еще раз - потоки нужны в asyncio чтобы конкурентно исполнять код старых библиотек использующих блокирующий i/o

Nikolay
03.07.2017
22:57:42
еще раз -
1) между асинхронностью и параллельностью нет никакой связи
2) run_in_executor() в большинстве случаев бесполезен при использовании ThreadExecutor
3) потоки в питоне, разумеется, параллельны
4) корутины в питоне, разумеется, реализуют кооперативную многозадачность, и в общем случае выполняются в одном потоке

Aleksandr
03.07.2017
22:58:05
> run_in_executor() в большинстве случаев бесполезен при использовании ThreadExecutor
по причине?

Constantine
03.07.2017
22:58:06
что не вечер, а Никаля против всех ))))

Nikolay
03.07.2017
22:58:12

Aleksandr
03.07.2017
22:58:18
> 3) потоки в питоне, разумеется, параллельны
разумеется нет
виной тому GIL

Nikolay
03.07.2017
22:58:30

Google

Nikolay
03.07.2017
22:58:45
виной тому GIL
GIL - это просто мьютекс, он не делает потоки не параллельными

Aleksandr
03.07.2017
22:59:26
корутина - это вообще функция с состоянием, она может быть как блокирующей так и неблокирующей, например greenlet без вашего вольшебного gevent блокирующие

Nikolay
03.07.2017
23:00:26
хаха)
что, это для тебя открытие?

Aleksandr
03.07.2017
23:00:50
еще раз, потоки под управлением интерпретатора - не параллельны, потоки сисетмные без его управления - параллельны, что с успехом используется при вычислениях, например

Nikolay
03.07.2017
23:01:28
ошибка только в том, что все потоки - системные, а GIL не распространяется на системные вызовы, например, и при этом неважно, под управлением интерпретатора поток или нет

Aleksandr
03.07.2017
23:04:54

Nikolay
03.07.2017
23:05:52
от этого потоки из-под управления интерпретатора не пропадут, просто GIL на них влиять не будет

Aleksandr
03.07.2017
23:06:36
речь изначально о коде который работает в интерпретаторе

Aleksandr
03.07.2017
23:06:46

Nikolay
03.07.2017
23:07:01
на внешние вызовы - нет

Aleksandr
03.07.2017
23:07:45

Nikolay
03.07.2017
23:07:46

Aleksandr
03.07.2017
23:08:51
это про статью на хабре

Nikolay
03.07.2017
23:09:50

Google

Nikolay
03.07.2017
23:10:19
между "работой с Python C API" и "вызовом во внешнюю сишную либу" есть большая разница
вкратце - сишная либа может сама спокойно наплодить своих потоков, и им будет наплевать на GIL
равно как и при залипании на системном вызове GIL не играет роли и потоки могут параллельно выполняться
именно поэтому aiofiles и работает, как ты правильно заметил выше

Aleksandr
03.07.2017
23:11:49
да-да я понял, потоки в питоне параллельны, но при этом толку от них и нет run_in_executor, если нужно сделать блокирующий вызов то либо пиши отдельный сервис либо ставь колом eventloop, а у asyncio api вообще что надо, бизнесовой абстракции почти

Constantine
03.07.2017
23:12:13
давайте про ноду

Aleksandr
03.07.2017
23:12:26

Nikolay
03.07.2017
23:12:46

Admin
ERROR: S client not available

Nikolay
03.07.2017
23:12:51
давай ты не будешь передергивать так уж явно

Aleksandr
03.07.2017
23:13:04
давайте про ноду
кто может нормально поднять абстракции asyncio для уровня ноды хотя бы?

Nikolay
03.07.2017
23:13:17
разумеется, вызовы в стандартную библиотеку будут под GILом
а в питоне можно

Aleksandr
03.07.2017
23:14:18
давай ты не будешь передергивать так уж явно
я ничего не говорил про работу с отпущенным гилом, я говорил про работу со стандартной блокирующей библиотекой (потому что C API), и как ее помирить с asyncio нормально, не лапшкодом а нормально

Constantine
03.07.2017
23:14:43

Nikolay
03.07.2017
23:14:57

Aleksandr
03.07.2017
23:15:11
потому что потоки интерпретатора конкурентны

Google

Nikolay
03.07.2017
23:15:55
поэтому остается либо ждать, пока какие-то вещи перенесут в asyncio, либо запускать их через ProcessPoolExecutor
ну либо использовать что-то типа celery, да

Aleksandr
03.07.2017
23:16:29

Nikolay
03.07.2017
23:16:50
потоки интерпретатора параллельны. точка. GIL там или не GIL - это уже вопрос контекста

Aleksandr
03.07.2017
23:17:36

Nikolay
03.07.2017
23:17:57

Aleksandr
03.07.2017
23:18:01

Nikolay
03.07.2017
23:18:27
вне интерпретатора или внутри него

Aleksandr
03.07.2017
23:19:15
раунд
я недооценил твой коммент выше, надо было стопануть) я словил синдром новичка)

Nikolay
03.07.2017
23:19:21
ну у меня просто ощущение, что ты начитался пары статей, решил толковать термины по-своему и начал спорить :)
лучше бы почитал больше материалов по теме

Aleksandr
03.07.2017
23:20:30

Nikolay
03.07.2017
23:21:08
я просто знаю, как оно работает, и объясняю тебе, что ты неправильно трактуешь термины
без обид

Aleksandr
03.07.2017
23:21:54

Nikolay
03.07.2017
23:23:06
а все потому что питон - не го