@ru_python

Страница 3094 из 9768
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
паралелизма у потоков нет из-за GIL, но новый GIL делает потоки конкурентными
единственное отличие нового гила от старого - вместо переключения по инструкциям он делает переключение по таймауту

никакого "делает конкурентными" там нет и в помине

Nikolay
03.07.2017
22:49:11
GIL не блокирует I/O, поэтому потоки конкурентны
GIL не блокирует сишный код, а конкурентность тут вообще ни при чем

race conditions возможны в питоне на отличненько даже при GIL

Aleksandr
03.07.2017
22:53:20
GIL не блокирует сишный код, а конкурентность тут вообще ни при чем
причем тут сишный код? у тебя есть блокирующий пакет socket, ты процесс будешь поднимать для него отедльный?

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
coroutine AbstractEventLoop.run_in_executor, посмотри для чего это сделано
я об этом статью писал и доклад читал, расскажи мне, для чего оно сделано

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
что не вечер, а Никаля против всех ))))

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
корутина - это вообще функция с состоянием, она может быть как блокирующей так и неблокирующей, например greenlet без вашего вольшебного gevent блокирующие
корутина - это функция, которая сама решает, когда явно отдать управление. В случае async/await это сделано гораздо более явно, чем в gevent, но код получается чуть более громоздкий

хаха)
что, это для тебя открытие?

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

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

Nikolay
03.07.2017
23:05:52
то есть потоки под управлением интерпретатора я могу на считать параллельно простые числа?
если ты используешь cython или вызовы в сишную либу математическую - разумеется

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

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

Nikolay
03.07.2017
23:07:01
речь изначально о коде который работает в интерпретаторе
в интерпретаторе работает питоновый байткод. На него GIL распространяется

на внешние вызовы - нет

Nikolay
03.07.2017
23:07:46
https://habrahabr.ru/post/167733/
я бы больше рекомендовал https://www.youtube.com/watch?v=AWX4JnAnjBE

Aleksandr
03.07.2017
23:08:51
я бы больше рекомендовал https://www.youtube.com/watch?v=AWX4JnAnjBE
ну там такой же умник прибежал с рассказом как обойти GIL, Андрей внятно и кратко все пояснил

это про статью на хабре

Nikolay
03.07.2017
23:09:50
ну там такой же умник прибежал с рассказом как обойти GIL, Андрей внятно и кратко все пояснил
ну, на видео все четко разжевано. А умник прибежал действительно с ерундой. А ты плохо читаешь, что я пишу

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
между "работой с Python C API" и "вызовом во внешнюю сишную либу" есть большая разница
какая внешняя либа? стандартная библиотека это не внешняя либа

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ом

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

а в питоне можно

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

Constantine
03.07.2017
23:14:43
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
поэтому остается либо ждать, пока какие-то вещи перенесут в asyncio, либо запускать их через ProcessPoolExecutor
или просто разобраться в том о чем рассуждаешь и использовать то уже сделано и работает

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

или просто разобраться в том о чем рассуждаешь и использовать то уже сделано и работает
я знаю, о чем я рассуждаю, даже исходники cpython ковырял на эту тему

Aleksandr
03.07.2017
23:17:36
забудь уже эту фразу, она неверна
слушай, я устал от тебя, ты не разбираешься в том о чем мы говорим

Nikolay
03.07.2017
23:17:57
слушай, я устал от тебя, ты не разбираешься в том о чем мы говорим
это ты не разбираешься, у тебя из-за GIL потоки внезапно стали конкуретными :)

Aleksandr
03.07.2017
23:18:01
я знаю, о чем я рассуждаю, даже исходники cpython ковырял на эту тему
я поздравляю тебя, конкурентность потоков от этого никуда не исчезает, они вообще не интерсуются твоим мнением

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
давай, читай) разреши я все же буду выносить в треды код чтобы не блокировать eventloop?
да делай, как тебе удобно :) только между "не блокировать эвентлуп" и "код работает быстрее" есть большая разница

а все потому что питон - не го

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