
Nikolay
05.03.2017
21:10:28
imap же
(сейчас должны набежать хаскелисты и начать орать про сраные монады)
вот тут и проблема wait(), он так не может

Google

Rocket
05.03.2017
21:11:38

Nikolay
05.03.2017
21:11:40
ему туплы подавай

Rocket
05.03.2017
21:12:35
Асинхронный map-reduce получается какой то.

Nikolay
05.03.2017
21:12:47
типа того

Rocket
05.03.2017
21:12:52
Окей. А из какого генератора?

Nikolay
05.03.2017
21:12:57
вот в 3.6 вроде сделали асинхронные генераторы
надо почитать

Rocket
05.03.2017
21:13:07
Из асинхронного, вроде как, да?

Nikolay
05.03.2017
21:13:39
типа того же gather(), который громоздит лист в памяти

Rocket
05.03.2017
21:14:13
Окей
Тогда надо написать диспетчер, который эвейтит источник таксков, пихает их в pending.

Google

Rocket
05.03.2017
21:15:32
И вейтить и таски и диспетчер сразу.

Nikolay
05.03.2017
21:16:00
и вся проблема сразу решается

Rocket
05.03.2017
21:17:31
async def process(source):
pending = source()
while len(pending):
done, pending =...
...
Да, а возвращать то как? ?

CthUlhUzzz
05.03.2017
21:18:10

Rocket
05.03.2017
21:18:41
Да, ты прав, @Enchantner , нужен асинхронный генератор.

Nikolay
05.03.2017
21:19:16

Rocket
05.03.2017
21:19:30
вейтим все подряд, шедулим то что пришло в соурс, йелдим то, что done.
Вот только что делать с эксепшенами?

Aragaer
05.03.2017
21:20:42
и запиваем смузи

Nikolay
05.03.2017
21:22:00

Rocket
05.03.2017
21:22:02
Знаешь, @Enchantner , я конечно люблю такие задачки, но вот спать хочу спокойно, по этому, если мне такое понадобится в продакшене, я лучше возьму asyncio.queue

Nikolay
05.03.2017
21:22:12
забьем на них хер
ой
то есть

Rocket
05.03.2017
21:22:35

Nikolay
05.03.2017
21:22:44
ну ты понел

Google

Rocket
05.03.2017
21:23:20
Вот если забить, то все просто, а вот если их надо обрабатывать - то этот простой диспетчер превратится в целый фреймворк на 5 тыщ строк.
Так что я лучше возьму очередь.

Nikolay
05.03.2017
21:23:52
зависит от того, что мы хотим делать с эксепшнами
по-хорошему, на момент yield они должны быть уже обернуты

Rocket
05.03.2017
21:24:30
Их можно спускать вниз....
Но тогда... Короче нафиг такой хоккей...
Асинхронный генератор кидает асинхронные эксепшены.... Аааааааааа!

Nikolay
05.03.2017
21:27:00
на go
самое забавное - очередь тебе тут тоже не сильно поможет

Rocket
05.03.2017
21:28:43
Когда я только начал с ботами телеги возиться, мне пришла в голову идея запилить асинхронную машину состояний внутри tornado. Ну чтобы не делать каждый раз state.next_handler(...)
а что нибудь типа
yield state.wait_next_query()
Причем с учетом пришедшего message type.
Так вот это задачка того же плана.

Rocket
05.03.2017
21:29:08
Может быть вернусь к этому безумию.

Nikolay
05.03.2017
21:29:15
ты будешь смеяться, но я с этой задачкой столкнулся на самой примитивнейшей задаче
у меня есть поток урлов и я его хочу кроулить
но хочу кроулить его я конечным набором воркеров, скажем, сотней
так вот, в случае с gather я этого сделать категорически не могу, потому что он мой красивый генератор на входе соберет со всех корутин и запердолит в список, что мне нафиг не надо
в итоге самый логичный и правильный выход из этого тупика - асинхронные генераторы

Rocket
05.03.2017
21:42:25

Nikolay
05.03.2017
21:43:00
Мое имхо - очереди.
не для того я в асинхронщину подавался, чтобы многопоточный подход использовать

Google

Nikolay
05.03.2017
21:43:07
но так-то да

Rocket
05.03.2017
21:43:18
asyncio.queue - суть тот же chan из go

YaOurTea
05.03.2017
21:44:59
math.sqrt(numpy.sum(numpy.power((data - neuron), 2)))
ошибка unsupported operand type(s) for -: 'map' and 'float'
data - это map, neuron - float

Nikolay
05.03.2017
21:45:28
оберни data в numpy.vector() или как он там
это же векторная операция
вроде просто numpy.array()

Rocket
05.03.2017
21:46:43
Пихаешь в source queue урлы, забираешь из destination queue результаты. Если source или destination переполняется, то await'ы ждут. Вполне себе асинхронно, причем, "воркеров" можно добавлять/убрать динамически.

Nikolay
05.03.2017
21:47:50
(по крайней мере, я так думал, оно не сработало)

Admin
ERROR: S client not available

Rocket
05.03.2017
21:48:47
Я попробую zmq в режиме client/server и расскажу. По идее не должно теряться.

Nikolay
05.03.2017
21:51:33
а вообще, если говорить о эксепшнах - то такой код надо уже писать в функциональном стиле, где их быть не должно
вот за это я и не люблю го - туда и эксепшны не завезли, и в функциональном стиле хер напишешь чо

Rocket
05.03.2017
21:52:28
Вопрос подходов. Я эксепшены люблю.
В питоне конечно же. В плюсах - ненавижу.

Nikolay
05.03.2017
21:53:09
http://img0.liveinternet.ru/images/attach/c/5/86/189/86189212_ZHirik_mem.jpg

Rocket
05.03.2017
21:53:19

Nikolay
05.03.2017
21:53:23
я эксепшны не очень люблю, но без них никуда
во многих случаях

Google

Nikolay
05.03.2017
21:54:11
но, в то же время, из-за своего “явное лучше неявного” эксепшны в питоне стали одним из немногих недостатков синтаксиса

Rocket
05.03.2017
21:54:22
Хех. Помню одну сетевую библиотеку в delphi, там message passing через эксепшены был сделан.

Nikolay
05.03.2017
21:54:29
в руби можно foo() rescue callback() написать
в питоне же, чтобы поймать и обработать эксепшен, надо минимум 4 строчки

Rocket
05.03.2017
21:55:04

Nikolay
05.03.2017
21:56:02
тоже, по сути, одна строчка
но это, скорее, си
а не c++

Rocket
05.03.2017
21:57:04

Nikolay
05.03.2017
21:57:28
у тебя на этапе компиляции все упадет же

Rocket
05.03.2017
21:58:02

Nikolay
05.03.2017
21:58:15

Aragaer
05.03.2017
21:58:24
ничонизнаю, -Wall -Werror и у меня тоже упадет на компиляции
или вы игнорите варнинги компилятора?

Tony
05.03.2017
21:58:56
хочу работать
а работы нет

Nikolay
05.03.2017
21:59:03
а то чо он

melancholiac
05.03.2017
21:59:39

Nikolay
05.03.2017
21:59:50