Реальные примеры работы с многопоточностью в питоне?

В книгах, в статьях и приложеным исходникам к ним все сводиться, что нужно создать тред и потом сделать джойн. Нигде не росматриваеться нормальные примеры, хотябы немножко приблежонными к реальным.
Сылками на статьи, книги, гитхаб где это все можно увидеть.
Спасибо
  • Вопрос задан
  • 871 просмотр
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Есть у меня интернет-магазин на Django. Он периодически получает от 1С json-файл с каталогом товаров и кучу jpeg'ов с фотографиями этих товаров. Файл надо распарсить и загрузить данные в базу, а для каждой фотографии сделать по 5 штук миниатюр. Естественно, что считать объёмное изображение с диска, 5 раз масштабировать и 5 раз записать обратно на диск - существенно дольше, чем записать в базу данные из словаря. Кроме того, их там может быть до 200 000. Разумно было вынести создание миниатюр в отдельные потоки.

Функция выполняющаяся в отдельном потоке:
def create_previews(file_path):
    file_name = os.path.basename(file_path)
    gallery_path = os.path.join(settings.MEDIA_ROOT, 'images')
    for size in settings.PREVIEW_SIZES:
        prefix = '%dx%d_' % size
        preview_path = os.path.join(gallery_path, prefix + file_name)
        if not os.path.exists(preview_path):
            try:
                img = Image.open(file_path)
                if (img.size[0] < size[0]) and (img.size[1] < size[1]):
                    continue
                canvas = Image.new("RGB", size, (255,255,255))
                preview = ImageOps.fit(img, size, Image.ANTIALIAS)
                canvas.paste(preview, (0,0))
                canvas.save(preview_path, optimize=True)
            except Exception as e:
                pass

И в коде, разбирающем json файл, для каждой фотографии, сохранённой в БД:
t = Thread(target=create_previews, args=(image.data.path,))
t.start()
Ответ написан
@akonovalov
Программист на компьютере
Настоятельно рекомендую посмотреть эти доклады (на ютубе есть ещё много - надо искать) и восполнить пробелы в теории - зачем вообще может понадобиться многопоточность и как её готовить в Python:
раз
два

Сам разбирался с многопоточностью в Python по книжке Дэвида Бизли "Python. Подробный справочник." 2010.
Книжка лежит в электронном виде на торрентах и прочих "пиратских" книгохранилищах.

Примеры применения можно поискать в популярных Python-проектах - если спросить у гугла "most popular python projects" - откроется список ссылок с самыми популярными проектами и некоторые из них могут использовать многопоточность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы