Size: a a a

2020 September 27

AZ

Andrey Zakharevich in PiterPy Meetup
ну тут высококонтекстный вопрос получился
источник

AZ

Andrey Zakharevich in PiterPy Meetup
но вообще это история про все мессенджеры, если не отвязать прием сообщения и отправку друг от друга, то просто не получится отправлять несколько сообщений разом или через какое-то время после запроса пользователя
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
На самом деле мне надо было услышать, что можно не лезть в ивент луп бота и думать, как перехватить событие из очереди, а можно просто импортнуть send_message туда, куда мне удобнее:))
источник

MK

Maxim Koltsov in PiterPy Meetup
вот, я об этом
источник

MK

Maxim Koltsov in PiterPy Meetup
мне бы не пришло в голову что это не очевидно
источник

MK

Maxim Koltsov in PiterPy Meetup
поэтому и не знал как помочь
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
Не догадалась!
источник

MK

Maxim Koltsov in PiterPy Meetup
(я всего лишь к тому как по-разному люди воспринимают вещи, а не пытаюсь кого-то выставить глупым, если что)
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
Вообще, это не самое красивое решение: хотелось завернуть логику работы с пользователем и сообщениями к нему/от него в один блок, а во втором только заниматься обработкой данных. Кажется, что из-за этого не пришло в голову, — не вписывалось в картинку, которую я хотела.

Но так будет быстрее, поэтому мне норм
источник

MK

Maxim Koltsov in PiterPy Meetup
блок "получить из очереди сообщение и отправить его в телегу" вполне отдельный от обработки данных вроде?
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
Maxim Koltsov
блок "получить из очереди сообщение и отправить его в телегу" вполне отдельный от обработки данных вроде?
Можно и так назвать

Раньше:
Модуль 1: все взаимодействие с человеком
Модуль 2: вся обработка

Сейчас:
Модуль 1: прием данных от пользователя
Модуль 2: обработка и отправка результата человеку

Можно и так, но имхо было эстетичнее, хотя так и так норм, конечно
источник

MK

Maxim Koltsov in PiterPy Meetup
хм
я бы сказал что тут три модуля
источник

MK

Maxim Koltsov in PiterPy Meetup
1. приём данных
2. обработка
3. отправка
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
Maxim Koltsov
1. приём данных
2. обработка
3. отправка
А, можно и так сделать
источник

МЧ

Маша Чакчурина... in PiterPy Meetup
Но я бы 2+3 склеила, потому что очередь мне по техническим причинам нужна только между 1 и 2, а после обработки я бы сразу кидала ответ человеку, и не выносила бы 3 в отдельный процесс.
источник
2020 September 28

E

Eugene in PiterPy Meetup
Гуру asyncio, кто может объяснить, почему этот код работает правильно в Python 3.7+ и работает неправильно в Python 3.6?

async def test_iterable_gather():
   data = [1, 2, 3, 4, 5, 6, 7, 8]

   async def aiter(iterable):
       for v in iterable:
           yield v

   aiterable = aiter(data)
   aiterables = [aiterable] * 8

   values = await asyncio.gather(
       *[it.__anext__() for it in aiterables],
       return_exceptions=True)

   assert values == data

(test_iterable_gather)
[3, 7, 8, 6, 5, 4, 1, 2] != [1, 2, 3, 4, 5, 6, 7, 8]

Expected :[1, 2, 3, 4, 5, 6, 7, 8]
Actual   :[3, 7, 8, 6, 5, 4, 1, 2]

Суть в том, что в Python 3.6 gather не сохраняет порядок списка.
источник

E

Eugene in PiterPy Meetup
Я просто хотел сделать grouper как в Itertools Recipes, но асинхронный, а он не работает в Py36. 🙃
Код с gather подсмотрел тут:
https://github.com/omnilib/aioitertools/blob/main/aioitertools/itertools.py#L516
источник

E

Eugene in PiterPy Meetup
Получается забавная ситуация, gather не гарантирует, что awaitable будут исполняться с сохранением порядка, но гарантирует, что порядок списка будет сохранён:

If all awaitables are completed successfully, the result is an aggregate list of returned values. The order of result values corresponds to the order of awaitables in aws.

Но в случае со списком одного и того же iterable, эти гарантии ломаются, потому что __anext__() выполняется как угодно. Это, наверное, логично. Но интересно, почему работает в Py37+, они добавили какие-то дополнительные проверки для гарантии сохранения порядка списка даже для такого случая?
источник

p

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

MV

Maxim Vasilev in PiterPy Meetup
pragus
Buffer api же
Спасибо! Действительно можно, но утечка все равно не пропала 😔
источник