@ru_python

Страница 7420 из 9768
Yegor
16.12.2018
15:50:35
Так я ведь и колупаюсь во всем этом потому что у меня ответы будут долгие

Bogdan (SirEdvin)
16.12.2018
15:51:21
Возможно я не совсем понимаю, но как много можно думать о gil? Треды вам скорее всего просто не нужны, если вы можете использовать asyncio и на этом все. Или есть какие-то тонкости?)

Tishka17
16.12.2018
15:52:08
Asyncio не поможет делать два дела параллельно, если нет io

Yegor
16.12.2018
15:52:11
Asyncio чет в голове не укладывается

Google
Tishka17
16.12.2018
15:52:29
А треды позволят, хотя и будет не быстрее чем по очереди

Сергей
16.12.2018
15:52:35
Не думайте о gil - звучит как не очень совет)
Почему асинхронный код, котором мешает GIL работает намного быстрее синхронного на определенных задачах?

Yegor
16.12.2018
15:52:46
Я не могу написать им того что скидывал выше

Bogdan (SirEdvin)
16.12.2018
15:52:55
Asyncio не поможет делать два дела параллельно, если нет io
Треды тоже, только у вас переключение контекстов не контроллируется

Tishka17
16.12.2018
15:53:36
Треды тоже, только у вас переключение контекстов не контроллируется
Так в asyncio тебе придется руками втыкать переключение, а в тредах оно по любому будет

Андрей
16.12.2018
15:54:23
Привет! Имею датафрейм такого вида: Расстояние, км Предприятие Водитель Документ Соль Иванов 1 900.352618 2 166.207261 Сидоров 3 680.800217 4 500.707984 Щебень Петров 10 753.589522 20 312.992229 30 712.442144 Иванов 40 940.743123 Петров 501 868.721067 Песок Попов 15 86.458835 800 288.436953 Как мне получить срез датафрейма, содержащий только данные о перевозках, совершенных одним и тем же водителем для разных предприятий? В данном случае такой df хочу получить: Расстояние, км Предприятие Водитель Документ Соль Иванов 1 900.352618 2 166.207261 Щебень Иванов 40 940.743123 #pandas #multiindex

Vladislav
16.12.2018
15:55:15
Всем добрый вечер Мне тут захотелось сделать такую вещь, как blueprint в UE Или ноды в blender В общем визуальное программирование, скорее пародия на него Использовать буду PyQt5 но дело не в нем К сути: Мне нужно что бы человек с помощью встроеных - мной написанных функций(циклов, условий), соединением блоков сделал алгоритм, и потом без проблем вызывал его в программе Я много думал над globals() exec() И вот последнее, до писать ко всей системе генератор кода, потом его компилировать в .pyc И без проблем вызывать в любом месте

Google
Bogdan (SirEdvin)
16.12.2018
15:56:02
Смотря что вам надо
Ну, мне кажется, что юзкейсов у тредов ограниченное количество и в основном все они связаны так или иначе с теми штуками, которые снимают gil

Сергей
16.12.2018
15:56:06
GIL не дает 2 потокам выполняться в один момент времени. Вы хотите сказать, что несколько корутин выполняется в один момент времени? Треды и корутины - это немного разных подход и часто для разных задач.

Bogdan (SirEdvin)
16.12.2018
15:56:14
Потому что в противном случае в третьем питоне оверхед жуткий

Владимир
16.12.2018
15:56:24
Вы видели, как оно работает в тредах, это переключение? Уж лучше руками
В этом видео python core developer говорит, что если много I/O, то треды могут ускорить код не смотря на GIL, но если треды сильно требовательные к процу, то скорость уменьшится, будет тратиться много времени на переключение между потоками

https://www.youtube.com/watch?v=Bv25Dwe84g0

Tishka17
16.12.2018
15:56:43
Ну, мне кажется, что юзкейсов у тредов ограниченное количество и в основном все они связаны так или иначе с теми штуками, которые снимают gil
Эм. Ну если тебе надо делать что-то параллельно и пофиг на производительность, почему бы не треды?

Владимир
16.12.2018
15:57:16
У вас для io завели инструмент лучше
спору нет, но речь о тредах

Bogdan (SirEdvin)
16.12.2018
15:57:26
Ну, зачем сейчас нужны треды в питоне тогда?

Tishka17
16.12.2018
15:57:52
Ну и опять же, на тредах писать проще

Сергей
16.12.2018
15:58:02
Ну, зачем сейчас нужны треды в питоне тогда?
Вы писали что то для GUI на питоне?

Владимир
16.12.2018
15:58:10
Ну, зачем сейчас нужны треды в питоне тогда?
Задействовать все ядра при большом количество I/O, например, asyncio будет на одном ядре работать

Bogdan (SirEdvin)
16.12.2018
15:59:04
Задействовать все ядра при большом количество I/O, например, asyncio будет на одном ядре работать
Приехали. У вас треды задействуют все ядра? У вас i/o зайдействует ядра?

Tishka17
16.12.2018
15:59:09
Опять же gil не говорит, что работает только один поток. Он об одном потоке, выполняющем именно питоновский код

Владимир
16.12.2018
15:59:20
Yegor
16.12.2018
16:00:02
мой код задействует все ядра?

Bogdan (SirEdvin)
16.12.2018
16:00:15
Откуда у вас возьмется нагрузка на больше чем одно ядро, если вы только не снимаете gil?

Опять же gil не говорит, что работает только один поток. Он об одном потоке, выполняющем именно питоновский код
Ну, если мы говорим про черную магию с снятием gil, то там конечно можно обмазатся потоками и оно классно будет работать :)

Yegor
16.12.2018
16:01:47
подскажите кусок кода, который будет хорошо грузить проц

Google
Владимир
16.12.2018
16:02:39
подскажите кусок кода, который будет хорошо грузить проц
учи go, там это проще, язык изначально задумывался как "загружатель" всех ядер ?

Tishka17
16.12.2018
16:02:53
os.fork() в вайл тру
Не, он не сможет загрузить. Довольно быстро на лимит процессов натолкнешься

Bogdan (SirEdvin)
16.12.2018
16:02:54
Не. Я про вызовы нативного кода. Банально шифрование или ещё что
Вызовы нативного кода должны снимать gil, иначе он остается даже при входе в нативный код. Ну и далеко не весь нативный код позволяет себе это делать, так как не весь он thread-safe

Сергей
16.12.2018
16:03:09
корутины используются в основном для псевдопараллельного выполнения одинаковых задач, требующих некоторого ожидания. Треды позволяют делать параллельно абсолютно разные задачи, часто не связные между собой.

Tishka17
16.12.2018
16:03:59
Bogdan (SirEdvin)
16.12.2018
16:04:15
Ну тогда между корутинами и тредами в простой ситуации не так много разницы.

Сергей
16.12.2018
16:04:23
как в процессоре выполняются параллельно разные процессы? Методом сохранения/загрузки контекста для каждого процесса.

Проксимов
16.12.2018
16:04:28
Лимит рекурсии тысяча что ли
Убрать разве нельзя?

Tishka17
16.12.2018
16:04:33
Маришка
16.12.2018
16:04:38
Tishka17
16.12.2018
16:04:40
Стек не резиновый

Проксимов
16.12.2018
16:04:53
Google
Bogdan (SirEdvin)
16.12.2018
16:05:10
Треды в питоне в простом случае не могут выполнятся паралельно.

Tishka17
16.12.2018
16:05:27
Ну так вы говорите про процессы или про треды?
Нативные треды от процессов не сильно отличаются. Если мы не про питон

Сергей
16.12.2018
16:05:37
там тоже псевдопараллельность (количество процессов ведь много больше количества ядер). Я говорю про то, что параллельным выполнением часто называют не совсем такое

Bogdan (SirEdvin)
16.12.2018
16:06:14
Нативные треды от процессов не сильно отличаются. Если мы не про питон
Как минимум тем, что у них значительно меньше оверхед на память, по идее. ну и общение между ними проще устроить

Tishka17
16.12.2018
16:06:31
У них просто общая памятт

И всё

Оверхед одинаковый, это одна сущность в ядре

Если мы про линукс

Владимир
16.12.2018
16:08:17
Ну тогда между корутинами и тредами в простой ситуации не так много разницы.
Это не так. Накладные на расходы на потоки и переключение между ними выше. Плюс гил начинает мешать если криво с ними обращаться.

Владимир
16.12.2018
16:08:19
Оверхед одинаковый, это одна сущность в ядре
Одинаковый оверхед у тредов и процессов?

Владимир
16.12.2018
16:08:38
Tishka17
16.12.2018
16:08:52
Нет, не одинаковый
Ну и за счёт чего же?

Владимир
16.12.2018
16:09:20
Ну и за счёт чего же?
Ты сейчас говоришь про линукс и прям чуть ли не его основам противоречишь)

Tishka17
16.12.2018
16:09:34
https://stackoverflow.com/questions/807506/threads-vs-processes-in-linux Linux uses a 1-1 threading model, with (to the kernel) no distinction between processes and threads — everything is simply a runnable task. *

первое что нагуглил

Владимир
16.12.2018
16:10:39
Да?
как минимум больше системных вызовов при мультипроцессинге, если не говорить про бОльшее потребление оперативки

Google
Tishka17
16.12.2018
16:11:17
там есть особенности, но отличия не такие большие

Владимир
16.12.2018
16:11:51
ну и за счет чего больше оперативки?
засчет того, что создается отдельная сущность, а треды делят память одного процесса

Владимир
16.12.2018
16:12:21
Ну и за счёт чего же?
За счет того, что переключение контекста между процессами тяжелее, чем между потоками. К по токов общие ресурсы как никак

Владимир
16.12.2018
16:12:49
Сергей
16.12.2018
16:12:50
Вы в своем споре забыли о его причине. То, что с появлением корутин треды стали не нужны. Но ведь это не так, это слишком узкий взгляд на треды

Tishka17
16.12.2018
16:13:03
процесс
а сущность "тред"?

вон выше ссылка

нет таких сущностей

Tishka17
16.12.2018
16:13:22
есть сущность "runnable task"

Bogdan (SirEdvin)
16.12.2018
16:15:09
Владимир
16.12.2018
16:15:55
и какие у них общие ресурсы?
http://www.cs.miami.edu/home/wuchtys/CSC322-18F/Content/UNIXProgramming/UNIXThreads.shtml

Владимир
16.12.2018
16:16:47
а сущность "тред"?
При мультипроцессинге, создается копия оригинального процесса, соответственно копируется вся память, что использовалась в одном процессе в другой, понятно, что ядро это оптимизирует, но тем не менее, при трединге, тред юзает ту же область памяти. Второй процесс просто так не может залезть в память первого и наоборот.

Сергей
16.12.2018
16:16:52
Конкретно в питоне практически не нужны, если вы не используете что-то, что снимает gil
Повторюсь, создайте гуи-программу, и попробуйте через корутины считать или сохранить какой то файл.

Yegor
16.12.2018
16:18:21


Lazoreth
16.12.2018
16:19:29
Народ подскажите пожалуйста - сижу тут ради практики пилю сервак на санике rpc на реббите, микросервисы все дела. Вопрос возник - а есть какое-то архитектурное решение, которое позволило бы шарить коннект к бд\реббиту между воркерами? С учётом того что воркеры по сути никак друг друга не зависят

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