Multiprocessing: используем все ядра

Поделиться
HTML-код
  • Опубликовано: 2 апр 2024
  • Поговорим про multiprocessing - способ реального распараллеливания задач на ядра компьютера. Multiprocessing позволяет решать любые задачи (IO-bound или CPU-bound)
    Ускорение не идеально и возможно только до определенного предела, смотрим закон Амдала.
    Создает несколько процессов, у каждого из которых своя память и свой GIL, каждый выполняет свою задачу, взаимодействие между ними требует pickle
    API принципиально похоже на многопоточность, выгодно использовать Pool, а для взаимодействия между процессами Queue и Pipe
    Плюсы:
    + реальная параллельность любых задач
    + не умирает из-за одного(!)
    + процессы не зависят друг от друга(у каждого процесса своя память и GIL)
    Минусы:
    - потребление ресурсов (памяти, процессора, времени)
    - необходимость сериализации в pickle
    - проблемы синхронизации (взаимодействие между процессами)
    Читать:
    docs.python.org/3/library/mul...
    Фаулер М. "Asyncio и конкурентное программирование на Python"
    Присоединяйтесь к помощи каналу, будет интересно)
    ✔️Бусти boosty.to/python_russian/donate
    ✔️Юмани 410011506612886
    Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
    #Python #PythonRussian #multiprocessing

Комментарии • 17

  • @PythonRussian
    @PythonRussian  Месяц назад +12

    кто не подписан на канал, тот использует только одно ядро =)

  • @user-em9sc8ei7u
    @user-em9sc8ei7u 4 дня назад +1

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

    • @PythonRussian
      @PythonRussian  4 дня назад +1

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

  • @user-buser_eto_ja
    @user-buser_eto_ja 29 дней назад +1

    Отличнейшая подача! Спасибо!

  • @DrillingEnglish
    @DrillingEnglish Месяц назад +2

    Спасибо за ваш труд! 👍

  • @DmitryRomantsov
    @DmitryRomantsov Месяц назад +4

    Не-не, нас не проведешь! Мы поставим python 4 и все будет легко и просто!

  • @MioGesa-md2ul
    @MioGesa-md2ul Месяц назад +1

    Коммент для благодарности вам и увеличение вовлеченности на канал 🎉

  • @neydygdrg1836
    @neydygdrg1836 Месяц назад +1

    Я так понимаю, что в книге Фаулера не только про asyncio, но и про потоки и мультипроцесы? Хотелось бы видос про виртуальное окружения venv, там вроде немного, но полезно

    • @PythonRussian
      @PythonRussian  29 дней назад +1

      да, он все темы рассматривает по конкурентности. Про венв - хорошая идея, запланирую

  • @stvJnK
    @stvJnK Месяц назад +1

    Отличный материал, а что скажите насчёт aiomultiprocessing ?

    • @PythonRussian
      @PythonRussian  Месяц назад

      честно скажу -не использовал, подозреваю что может в отдельном процессе что-то выполнить а в лупе асинкио дождаться этого. Наверное в каких то ситуациях это может пригодиться, но я бы сначала в асинкио просто посмотрел нет ли такой возможности? Там же есть выполнить в отдельном потоке, возможно и для процесса есть.

  • @user-pq4mm2yx8u
    @user-pq4mm2yx8u Месяц назад

    Привет. У меня проблема. Работают несколько процессов. Завершение через нажатие кнопки - процесс который поймал нажатие передаёт 'stop' в общую queue и завершается, остальные процессы ищут этот стоп в очереди и завершаются также. Это работает стабильно если не дольше примерно часа-двух. Но если например через 6 часов или сутки - то процесс который поймал нажатие клавиши завершается, а остальные просто перестают выполнять работу и зависают пока принудительно их не завершить. Есть идеи в чем дело?)

    • @PythonRussian
      @PythonRussian  Месяц назад +3

      смотри, при работе с конкурентностью, особенно с процессами надо густо все смазать логированием, прямо каждый шаг, это нужно чтобы по логам понять что и где произошло, на каком моменте отпало. Еще посмотри на таймауты, на очередь (это очередь из процессинга?), что там все ок, нет ли по коду вечных циклов. Кстати навел на мысль, сниму видео про логирование.

  • @warmybo
    @warmybo Месяц назад

    а потоки не тоже самое? потоки GIL обходят?

    • @PythonRussian
      @PythonRussian  Месяц назад +2

      посмотри пожалуйста мое видео про потоки, они могут обойти ГИЛ, но только для IO задач, в видео про потоки я как раз показывал разницу, когда на вычислительных задачах время не только не уменьшалось, но увеличивалось. Так что это не одно и то же на данный момент(!), когда отключат ГИЛ, возможно процессы и не понадобятся.

    • @warmybo
      @warmybo Месяц назад

      @@PythonRussian спасибо большое)

  • @ciklomat
    @ciklomat Месяц назад

    Видео из серии я не зануда, зануда это не я.