Size: a a a

2021 November 01

e

esp in PiterPy Meetup
Кто-нибудь сталкивался с такой фигнёй?

https://github.com/OpenNFT/python-rtspm/runs/4062473686?check_suite_focus=true

ModuleNotFoundError: No module named 'setuptools'


setuptools там есть, если что. 😏
Локально та же фигня происходит. Это при попытке выполнить pip wheel на проекте с Poetry.

Команда вот такая:
subprocess.CalledProcessError: Command '['/opt/_internal/cpython-3.6.15/bin/python', '/github/workspace/setup.py', 'build', '-b', '/github/workspace/build']'

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

e

esp in PiterPy Meetup
Эта хрень чинится вот так:
[build-system]
requires = [
   "poetry-core>=1.0.0",
   "setuptools",
   "pybind11",
]


Случайно нашел в issue
https://github.com/python-poetry/poetry/issues/3153
источник

Б

Боброний in PiterPy Meetup
Спасибо!
источник
2021 November 02

JP

Juri Pro in PiterPy Meetup
Всем привет, подскажите пожалуйста, как решаются подобные задачи:
1. Есть производитель данных (читает с сервиса данные через API)
2. Есть несколько потребителей, штук 20(у каждого своя тяжёлая логика вычислений)
---
Надо, чтобы потребители с минимальными задержками получали данные от производителя...
Смотрю в сторону Kafka, RabbitMq, кажется, что тяжеловато для такого решения... Может это как-то проще можно в Python сделать, какими нибудь хитрыми очередями и асинхронностью ...?
источник

MV

Maxim Vasilev in PiterPy Meetup
А почему rabbitmq тяжелый?
источник

JP

Juri Pro in PiterPy Meetup
Для меня это выглядит как отдельный сервис, который надо устанавливать, настраивать... Мне кажется, что задача проще у меня...
источник

MV

Maxim Vasilev in PiterPy Meetup
Тогда может быть https://zeromq.org/? Не знаю конечно, насколько для вашей задачи подойдет 🙂
источник

JP

Juri Pro in PiterPy Meetup
Ок, спасибо, посмотрю.
источник

e

esp in PiterPy Meetup
Если все потребители на одном и том же компе запускаются и если они все делают какую-то работу на CPU, тут ничего кроме мультипроцессинг-пула с обычной очередью или пайпами не выдумаешь. Такое легко программируется, но не масштабируется. А что если завтра надо будет распределять задачи в кластере? Вот тут уже нормальные очереди и понимание распределённых вычислений нужны.
источник

JP

Juri Pro in PiterPy Meetup
Потребители наверное будут конкурировать за одну очередь(как обойти) ? Хотелось бы механизм 'одновременной' доставки сообщений...
---
Да, не масштабируемо, согласен.
источник

e

esp in PiterPy Meetup
они не будут конкурировать за очередь. они будут выхватывать из очереди задачи по мере завершения своей текущей задачи. Допустим, у вас 8 ядер, вы создаёте пул на 8 воркеров, каждый воркер получает ссылку на очередь и вытаскивает из неё данные для вычислений. в такой схеме все воркеры будут нагружаться одинаково и не будут простаивать.

Вместо очереди можно использовать каналы (pipes). На каждого воркера создаётся pipe и producer передаёт данные в воркера только через этот pipe. Когда producer завершает работу, он шлёт всем воркерам сигнальное значение, например None. Но на практике, что пайпы, что очередь - в питоне примерно одинаково работает это всё.
источник

e

esp in PiterPy Meetup
Лучше, конечно, делать такую штуку с заделом на будущую распределённость, на нормальных очередях, как это принято.
источник

JP

Juri Pro in PiterPy Meetup
Что посоветуете?
источник

e

esp in PiterPy Meetup
Если что-то коробочное, посмотрите ray
https://www.ray.io
источник

JP

Juri Pro in PiterPy Meetup
Ок, спасибо.
источник

e

esp in PiterPy Meetup
источник

JP

Juri Pro in PiterPy Meetup
Читаю, вроде то что надо...
источник

AZ

Andrey Zakharevich in PiterPy Meetup
Важный вопрос, что должно происходить при перезапуске всей системы? Данные в очереди выкидываются? Или надо сохранить? А если один воркер умрет в процессе работы? Это все критичные штуки, ради которых отдельные сервисы и были придуманы
источник

JP

Juri Pro in PiterPy Meetup
По идее воркер должен понять, что система закрывается/перезапускается доделать свои дела, не брать новых данных на обработку, положить свое состояние в базу и завершиться...
У меня в основном вопрос только по одному моменту, как сделать, чтобы информация 'синхронно' поступала всем воркерам одновременно.
Чтобы не было таких ситуаций, когда воркер ждёт освобождения 1 очереди другими воркерами, чтобы получить свою порцию информации...
Т.е. информацию от продюсера, надо распаралелить на несколько потребителей+буферизация у потребителей, т.к. разная скорость работы...
источник

PM

Pavel Minenkov in PiterPy Meetup
Redis pub/sub не подойдёт?
источник