LINUX.ORG.RU
ФорумTalks

Питонисты

 , , ,


1

2

Немного жж.

Ищем питониста, включил в тест одну из своих любимых задач. Задача на самую базовую синхронизацию тредов (либо тасков если хочется asyncio), и в N=2 варианте решается в 5 строк. Даже в 2 строки, в зависимости от интерпретатора и условия. Тупо пара локов.

Из нескольких сотен кандидатов её кое-как в базовом варианте решил один. Вариант в N>2 потоков не решил вообще никто. Большинство людей походу даже не дошли что там блин надо что-то синхронизировать.

Wtf? Неужели никто из питоноедов ни разу потоки не юзал? Типа фласк/джанга/GIL все стерпят, а что там внутри пофиг?

P.s. вакансия висит в жобс, но нужен паспорт EU/EFTA

★★★★★

Главное помнить, что учить паскаль как первый язык — это УГ, а душить питона — рулез. Ведб он же не АКТУАЛЕН в обучении.

BceM_IIpuBeT ★★☆☆☆
()

либо тасков если хочется asyncio

Даже очереди не предлагали?

vvn_black ★★★★★
()

Задача на самую базовую синхронизацию тредов

Что за задача?

rupert ★★★★★
()

Питон нужен только для гламурных блокнотов - чтобы и документ и код и вывод в одном файле

TooPar
()

Так у тебя там задача говно с неправильными условиями. ССЗБ. Страдай от собственного невежества.

mimico
()

Самое смешное что потоки (или то что ты под ними понимаешь) в питоне не юзал в явном виде. При этом на C#, C++, C юзал вовсю. Нужды не было.

ЗЫ

Глянул в гугл сюда вроде, решение элементарно, но если оно не использовалось то по памяти не вспомнить. Не уверен что это всё полезно в памяти держать постоянной.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 4)

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

Я чувствовал себя невероятно крутым, но почему-то регулярно получал звезды от лида за то, что мой крутой код в 4 и даже в 2 строчки никто не понимает.

r_asian ★☆☆
()
Ответ на: комментарий от TheAnonymous

Не умеет. Он умеет в асинхронность и в многопроцессность. Но ТС про это не знает, что говорит многое о нём и о конторе.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)

Тем временем я:

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

wandrien ★★
()

фласк/джанга

Там обычно уйма процессов и в итоге лочат всё в базе, а не питоне. Питонистов, которые это делают, видел своими глазами.

x3al ★★★★★
()

Я так себе питонист, как-то плюсы в основном: asio там, бывает пониже на pthreаd, вот на c++17 уже подвезли много чего тут на эту тему.

Но как-то реально страшно становится о мысле этим рулить в пайтоне. Реально пользуешься по принципу чёрной коробки, а там со всякими этими GIL и прочим…

Это магия питона наверно. Хотя надо почитать как-нибудь про тот же https://webdevblog.ru/obzor-async-io-v-python-3-7/ И вся магия непонятная уйдёт…

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 2)

Wtf? Неужели никто из питоноедов ни разу потоки не юзал? Типа фласк/джанга/GIL все стерпят, а что там внутри пофиг?

Всё сильно хуже. Даже люди, которые думают, что научились синхронизировать и используют блокировки, зачастую делают это кошмарно криво, оставляя скрытые мины в коде, которые потом даже квалифицированный програмист с трудом сможет обнаружить. Вплоть до того, что проще заново переписать код, чем отлаживать его.

byko3y ★★★★
()
Ответ на: комментарий от eternal_sorrow

А если threading

То мы имеем дело с извращенцами, которых осуждать нынче осудительно в Европах. Вот честно не понимаю зачем при GIL нужен threading. Больше похоже на заглушку, которая станет полезной, когда найдут способ избавиться от GIL, но не раньше. Сейчас зачем это применять я ХЗ, разве что более привычным методом «параллелить» код, вместо какого-нибудь цикла.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Далеко не все задачи требуют выполнения кода python. Если программа большую часть времени проводит в IO, то потоки вполне применимы.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от peregrine

зачем при GIL нужен threading

а это такая хитрая очередь, на мой взгляд. Мой кейс использования threading - это когда у тебя сетевой клиент и между коннектами/хендшейками надо выполнить код, вот тогда это эффективно.

fang90 ★★★★★
()
Последнее исправление: fang90 (всего исправлений: 1)

Лет 7 использую питон и ни разу на нем не потребовалось использовать многопоточность. Многопроцессность - да, многопоточность - нет. Таки вопрос - а чего вы ждете добавив нетипичный кейс в тесты для кандидатов? Увеличения срока найма в три-пять раз?)

Norgat ★★★★★
()

Неужели никто из питоноедов ни разу потоки не юзал?

я когда-то давно юзал, еще когда перл был жив. но я не питонист, а админ. такой вот парадокс.

crypt ★★★★★
()

Синхронизация из threading почти никогда не нужна, потому что воркеры это разные процессы, которые крутятся на нескольких нодах.

Мне threading понадобился однажды в интеграционном тесте сервиса.

qaqa ★★
()

Пишу на питоне скрипты автоматизации, когда выразительности bash не хватает. Ни разу не нужен был многопоток.

seiken ★★★★★
()

Я для собеседований делал проще. Показывал код, приводящий к взаимной блокировке потоков и просил найти и объяснить ошибку. Это тоже никто осилить не мог. Так что я удалил это задание из тестов.

При этом тест был для программистов на C#. Так что дело не в Питоне.

Если пойти дальше, то и в однопоточных примерах на Си в три строки люди не могут найти ошибки. А Вы говорите потоки.

Kogrom
()
Ответ на: комментарий от wandrien

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

OpenStack?

nozh
()

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

Nastishka ★★★★★
()
Последнее исправление: Nastishka (всего исправлений: 1)

включил в тест одну из своих любимых задач.

ну блин, я тоже уже хочу. колись.

Rastafarra ★★★★
()
Ответ на: комментарий от peregrine

threading - это прекрасно.

Во-первых, этот импорт практически не увеличивает потребление памяти интерпретатором, в отличие от аналогов.

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

Использую threading в nohang при выполнении внешних команд. Когда главный поток не должен прерываться ожиданием выполнения команды - за миллисекунду рожаем тред и выполняем команду в нем, и основной поток не блокируется.

hakavlad ★★★
()

Знаком с аспирантом ВШЭ, питонером, он даже и не знает что такое GIL. Это «высшим образованием» называется.

Удивляться тут нечему.

WitcherGeralt ★★
()

Вы используете треды на питоне? GIL уже отменили? Или это какой-то хитрый питон?

cobold ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Знаком с аспирантом ВШЭ, питонером, он даже и не знает что такое GIL. Это «высшим образованием» называется.

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

aquadon ★★★★★
()
Ответ на: комментарий от cobold

Я не могу раскрыть деталей, но была задача, в которой нужно было общаться с внешним API, которое управляет длительным (внешним по отношению к моей программе) процессом. И возникла задача запустить несколько этих процессов параллельно (и раздельно ими управлять) - API это позволяло. Решил эту задачу с помошью ThreadPoolExecutor’а, в который закидывал задачи в цикле.

Когда начал писать другой проект для этого же API, сразу держал в голове возможность параллельной работы, поэтому задействовал асинхронность. Это принесло свои проблемы, но это уже другая история. Суть в том что иногда threading и asyncio подходы могут быть равнозначными.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)
Ответ на: комментарий от Nastishka

вызывают в офис фей

Колись, что за контора. У них вакансий нет?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от peregrine

Не умеет. Он умеет в асинхронность и в многопроцессность. Но ТС про это не знает, что говорит многое о нём и о конторе.

Открой для себя удивительный мир concurrent.futures. Внезапно если у тебя есть код, работающий на до-asyncio версиях либо мигрированный со второго питона, то это вполне адекватная замена асинхронности

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от qaqa

Синхронизация из threading почти никогда не нужна, потому что воркеры это разные процессы

Ты путаешь треды и процессы

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от cobold

В такого рода задачах непонятно зачем треды

Например у тебя есть пачка независимых сетевых вызовов по которым ты строишь результат. Какие варианты? Asyncio круто, но для этого надо переписать половину кода, который изначально вообще под py2.7 работал. Треды с pool executor вполне красиво работают.

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Таким образом приходим к выводу что кроме веба это особо не требуется.

И внезапно работать после такого собеса придётся с вебом, какое совпадение.

upcFrost ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Это называется асинхронностью...

Т.е. многопоточность на Pentium II нахывается асинхронностью... Интересная у вас трава.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от wandrien

ищу гонки в огромной кодовой базе на гринлетах

На питоне? Интересная работа. Если опенсорс, где поглядеть?

Shadow ★★★★★
()
Ответ на: комментарий от peregrine

Сейчас зачем это применять я ХЗ, разве что более привычным методом «параллелить» код, вместо какого-нибудь цикла.

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

В целом это можно сделать в один поток например на MQ и ожидании на S3 объекте, но при этом будет сложнее отработать retry. С тредами в такой задаче все прозрачно, по сути это asyncio для не-asyncio кода

upcFrost ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.