@proelixir

Страница 859 из 1045
Den
20.01.2018
18:57:58
Привет всем А есть ли у ecto возможность генерировать миграции на основе diff’a моделек и бд?

Нашел такой пэкэдж https://github.com/xerions/ecto_migrate

Alexander
21.01.2018
09:06:14
а то похоже первый не дружит с OTP 20.x
мы уже давно на 20.3 и всё там ок с фениксом

ой, на 20.2 то есть

Google
Alexander
21.01.2018
09:07:01
вообще на 20.x ветке проблем не помню

Evgeny
21.01.2018
09:07:30
Возможно там проблемы возникают в определенных случаях, которые у вас просто не наступают

Вы на сообщения при компиляции феникса смотрели?

Alexander
21.01.2018
09:14:35
варнинг есть, но проблем никаких нет, аплоады мультипартом работают

а вот со strong_rand_bytes были определенные траблы у народа ?

https://github.com/elixir-plug/plug/issues/629

Evgeny
21.01.2018
13:27:09
А можно в эликсире создавать алиасы модулей? Грубо говоря, чтобы у одного модуля было несколько имен.

ага, внутри модуля можно обычным alias

а в глобальной области видимости можно?

впрочем вопрос снят, похоже в любом lexical scope можно

Артем
21.01.2018
16:39:36
всем привет. есть вопрос по пулам процессов. есть пулбой, но он говорит, что к его процессам нельзя делать cast, только call. на мой взгляд это несколько уменьшает его полезность, т.к. вызывающий процесс блокируется. есть какие-то альтернативые кроме как сделать велосипед?

задача очень простая - слушать вебсокет и раскидывать парсинг данных с него по пулу процессов

соответственно, исходный процесс хотелось бы иметь один

Google
Evegeniy
21.01.2018
16:41:03
например сделать еще 1 процесс, который будет общаться с твоим пуллом

ты делаешь call, он отвечает и потом через какое-то время асинхронно вызывающему процессу что-то возвращает

P1 cast/call->> Proxy-процесс, который общается с пулом cast->> PoolBoy

лично мне такое решение пришло, думаю кто-то может что-то более вразумительное порекомендовать

Артем
21.01.2018
16:43:07
а как это поможет? прокси процесс будет залипать в ожидании ответа от процесса из пулбоя

Evegeniy
21.01.2018
16:43:33
ты пишешь, что у тебя основная проблема в том, что вызывающей процесс блокируется

он и не будет блокироваться

Артем
21.01.2018
16:43:47
неправильно сформулировал

ключевое, что нужно - обеспечить реально параллельную обработку сообщений из вёбсокета. то есть я хочу, чтобы был пул из 5 процессов, которые одновременно переваривали бы до 5 сообщений

с пулбоем, похоже, предполагается, что вызывающих процессов для этого должно быть тоже 5

Evegeniy
21.01.2018
16:47:41
да вообще нет

ты же можешь зачекаутить из пулла сразу 5 воркеров

Артем
21.01.2018
16:49:20
ну вот я не понимаю, как можно асинхронно, не дожидаясь возврата сообщения, запустить воркер пулбоя. без него для этого можно использовать каст

в его доке говорится каст нельзя юзайте колл

Evegeniy
21.01.2018
16:52:00
я заранее извиняюсь, может я тупулю очень сильно, потому что не профи, но по-идее ты можешь сделать как-то так

Worker1 = poolboy:checkout(PoolName). Worker2 = poolboy:checkout(PoolName). … genServer.cast(Worker1, Request).

для эрланга точно так валидно

и потом вернуть их в пул

поправь пожалуйста, меня, если так невозможно

да, синтаксис в моем ответе выше — что-то вроде псевдо кода на эрлангксире ?

Google
Артем
21.01.2018
16:55:00
http://blog.elixirsips.com/2014/07/16/errata-dont-use-cast-in-a-poolboy-transaction/

Evegeniy
21.01.2018
16:55:11
2014

это раз

Артем
21.01.2018
16:55:38
ну у меня это точно так же не работало на тестовом инсталле две недели назад)))

Evegeniy
21.01.2018
16:55:41
второе, если очень хочется — тебе же так никто не запрещает сделать

тогда не знаю ?

Артем
21.01.2018
16:56:03
то есть вызывался всегда первый процесс из пула, хотя он был занят

Evegeniy
21.01.2018
16:56:05
в чем тогда проблема прокси-процесс сделать?

не не

ты зачекаутишь же

конкретный процесс

Артем
21.01.2018
16:58:02
ну типа для этого внутри них нужно вставлять какую-нибудь сигнализацию, что он свободен, иначе как знать, какой чекаутить

Evegeniy
21.01.2018
17:00:14
В книге Learn You Some erlang

в 18 главне

описывается пример построения своего простейшего пула

и там эта штука есть

в смысле, может тебе идея оттуда поможет

у него просто есть отдельный процесс, который смотрит, свободны воркеры или нет

если нет, кладет сообщения в очередь

мне кажется, пулбой или другой пул должен примерно также уметь

Google
Evegeniy
21.01.2018
17:01:45
но опять же, я не супер-опытный с эрлангом/эликсиром

Артем
21.01.2018
17:01:55
https://medium.com/pharos-production/process-registry-one-node-pool-c3a56f0f199f

ну я читал сегодня статью, собрать такое не особо сложно-то да

я к сожалению тоже без избыточного опыта)))

я прям не знаю

может посмотреть в сторону какой-либо реализации очередей

то есть процесс с веб-сервером будет класть что-то в очередь

а 5 воркеров пытаться из неё извлекать

чтобы не городить мониторинг процессов

Evegeniy
21.01.2018
17:11:13
http://learnyousomeerlang.com/building-applications-with-otp#a-pool-of-processes

вот в книжке Хеберт делает нечто подобное тому, что тебе нужно

https://github.com/koudelka/honeydew

10 секунд гугления помогли мне найти вот это

похоже на то, что тебе нужно



Артем
21.01.2018
17:34:08
https://github.com/koudelka/honeydew
Ага читал про эту штуку

Надо посмотреть быстро ли оно данные из очереди извлекает

https://github.com/sheharyarn/que

вот даже пободрее вариантик

Dmitry
21.01.2018
18:27:55
GenStage же

Google
Alexey
21.01.2018
20:38:26
кстати, в доке по GenStage говорится, что если просто надо распараллелить, то лучше взять Task.async_stream/2 - у него есть опция max_concurrency, которая ограничит кол-во одновременно работающих тасков

Alexey
21.01.2018
20:40:21
да. я сравнивал на своих тестах каких-то. async получился быстрее, чем flow

Alexey
21.01.2018
20:40:25
я использовал poolboy, потому что у каждого воркера был сложный state и было немного накладно для каждого запроса инициализировать этой state заново

Артем
22.01.2018
05:43:53
кстати, в доке по GenStage говорится, что если просто надо распараллелить, то лучше взять Task.async_stream/2 - у него есть опция max_concurrency, которая ограничит кол-во одновременно работающих тасков
таск - это когда заранее все задачи для выполнения известны. и предполагается, что исходный процесс-таки ждёт ответа от таска

GenStage же
а вот это реально похоже на то, что можно попробовать, спасибо

Alisa
22.01.2018
10:08:18
так что в итоге, в эликсире действительно удобно в параллельность или это маркетинговый булщит и в других языках гемора не меньше?

Alexey
22.01.2018
10:15:38
в параллельность удобно. но это потому, что многие задачи в ерланг решаются вообще иначе

Aldar
22.01.2018
10:16:39
так что в итоге, в эликсире действительно удобно в параллельность или это маркетинговый булщит и в других языках гемора не меньше?
Сложные задачи, связанные с конкурентностью и многопоточность легко, а простые задачи типа круда сложно

Точнее не сложно, а сложней чем в том же руби

Alex
22.01.2018
10:25:59
так что в итоге, в эликсире действительно удобно в параллельность или это маркетинговый булщит и в других языках гемора не меньше?
в других языках все просто по-другому. языков с SMP рантаймом вообще мало и все они сильно "обычнее" в плане предоставляемых примитивов, чем эрланг/эликсир.

Страница 859 из 1045