[uanog] Parallel processing - which one to use?
Mykola Ulianytskyi
lystor at gmail.com
Tue Jan 12 19:19:44 EET 2021
> Что выбрать?
C++ / C# / Java
Multithreading в питоне - это недоразумение
https://wiki.python.org/moin/GlobalInterpreterLock
--
Best regards,
Mykola
On Tue, Jan 12, 2021 at 6:55 PM Volodymyr Litovka <doka at xlit.one> wrote:
> Привет,
>
> а как правильно подойти к следующей задаче?
>
> Есть приложение (e.g. MyApp), которое обрабатывает данные из нескольких
> источников:
>
> +-----------+
> | REST API |
> +--+-----+--+
> | |
> PUSH (TCP) | | GET (HTTP)
> | |
> v v
> +---+-----+---+
> UDP | | Output
> --------->+ MyApp +----------->
> | |
> +-------------+
>
>
> Поток UDP довольно мощный и является источником RAW data. Для обработки
> этих данных нужна дополнительная информация, хранящяяся в SQL - она доступа
> по REST API, а обновления - по TCP PUSH NFYs
>
> Для снижения нагрузки на REST и увеличения собственного быстродействия,
> при старте MyApp наполняет in-ram cache, запрашивая стартовые данные из
> REST API и больше никогда к нему не обращаясь, а обновления приходят по TCP
> (PUSH NFYs)
>
> Таким образом, в процессе работы приложения всегда есть два параллельных
> процесса, один из которых довольно ёмкий либо по времени, либо по ресурсам -
>
> 1) старт - приложение долго тянет базу из REST API, реагируя при этом на
> периодические TCP PUSH NFYs (тут можно разбить вытягивание большого объема
> данных на более мелкие чанки)
> 2) основной цикл работы - приложение слушает очень интенсивный поток UDP
> (я бы сказал, что делает это без пауз на передохнуть), реагируя при этом на
> периодические TCP PUSH NFYs
>
> Пока что это пишется на Питоне, что вносит определенные ограничения в
> набор механизмов. Три варианта, какие я вижу:
>
> - multiprocess - три отдельных приложения
> - тут более-менее понятно - система сама будет распределять CPU
> resources между приложениями по требованию + внешняя синхронизация
> - но выглядит оно эскадрой пушечных парусников из книжки по истории
> ;-)
> - multithreading - три треда в одном приложении, это уже более
> "модно и молодежно" (хотя задача синхронизации событий остается), но:
> - гарантируется ли своевременная передача исполнения треду с TCP
> listener upon packet arrival в услових интенсивной работы треда,
> обслуживающего UDP?
> - я читал/слышал, что у Питона сложная история отношений с
> multi-threading, не наступить бы еще тут на грабли
> - python asyncio
> - это удобно - одно приложение, никакой синхронизации событий между
> автономными процессами
> - но вообще это эффективно для такой задачи?
>
> Что выбрать? Какие еще варианты подхода к снаряду могут быть? Как вообще
> правильно это делать?
>
> Спасибо!
>
> --
> Volodymyr Litovka
> "Vision without Execution is Hallucination." -- Thomas Edison
>
> _______________________________________________
> uanog mailing list
> uanog at uanog.kiev.ua
> https://mailman.uanog.kiev.ua/mailman/listinfo/uanog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.uanog.kiev.ua/pipermail/uanog/attachments/20210112/5eea4957/attachment.html>
More information about the uanog
mailing list