LINUX.ORG.RU

[python]Разделить объект между процессами


0

0

Всем привет!

Задача ставится следующим образом:

Имеются 2 независимых процесса (для определённости А и Б). Процесс А поддерживает в актуальном состоянии словарь а, процесс Б - словарь б. Для работы процессу А требуется содержимое словаря б, а процессу Б - словарь а.

Вопрос:

Как это реализовать в многопроцессной среде с минимальным оверхедом? Вариант с использованием shm_wrapper рассматривался, но тогда получается, что надо каждый раз производить сериализацию/десериализацию, но ожидается, что один из словарей будет активно изменяться. Условие многопроцессности крайне желательное, ибо в этом случае обходится проблема с GIL (питоновские потоки не праллелятся) и заворачивание процессов А и Б в классы становится приятным и удобным. В случае отсутствия сравнительно простого и эффективного решения таки придётся использовать потоки.

Дополнительный вопрос:

Как в питоне можно передать параметр в функцию по ссылке?


>> Как в питоне можно передать параметр в функцию по ссылке?

def func(a,b,c):
return c,b,a

b,c,a = func(a,b,c)

kto_tama ★★★★★ ()
Ответ на: комментарий от kto_tama

Ммм... Боюсь показаться неграмотным, но что должен делать этот код? У нас 3 переменные с неопределённым значением. Мы присваиваем им их же значения, но в другом порядке. Что должно произойти? И как увидеть, что фактические параметры передались по ссылке, а не по значению?

hc ()
Ответ на: комментарий от hc

в питоне все типы - ссылочные. вы и так передаете в функцию по ссылке, в чем проблема?

rexadecimal ()

> ибо в этом случае обходится проблема с GIL

Это действительно главная проблема вашего приложения? Профайлером проверяли или просто слышали про это где-то?

Если нужны процессы, то используйте стандартный модуль. Там есть все что вам нужно, не изобретайте велосипедов: http://docs.python.org/library/multiprocessing.html

В любом случае, не занимайтесь преждевременной оптимизацией.

Как в питоне можно передать параметр в функцию по ссылке?

Пожалуйста, выучите матчасть. В питоне всё - ссылки, которые ссылаются на изменяемые и неизменяемые объекты.

ntp ()
Ответ на: комментарий от ntp

Я и говорю про multiprocessing. Проблемы в связи с GIL хочу заранее избежать, потому что пишу биллинг. Процесс, который парсит входящие netflow, не должен блокировать или затруднять работу процесса, который занимаетс собственно подсчётом. За матчасть таки да, подучить надо

hc ()
Ответ на: комментарий от hc

Я и говорю про multiprocessing.


Тогда в чем вопрос? В документации все описано. Читайте.
http://docs.python.org/library/multiprocessing.html#exchanging-objects-betwee...
http://docs.python.org/library/multiprocessing.html#sharing-state-between-pro...

потому что пишу биллинг <...> матчасть таки да, подучить надо


Не знающие матчасть люди пишут биллинг. На питоне. Нет пути.

ntp ()
Ответ на: комментарий от ntp

> Не знающие матчасть люди пишут биллинг. На питоне. Нет пути.

Я админ, а не программист. Вернее, много больше сетевик, чем программист. Но малые знания питона имею. А написать надо. По крайней мере, на питоне у меня лучше получится, чем на чём-либо ещё. Заодно в процессе узнаю что-то новое о языке.

По поводу матчасти - я скорее Cisco Press прочитаю или Таненбаума того же ещё на раз, чем подробно изучать документацию по питону.

За ссылку спасибо - почему-то при беглом осмотре не наткнулся на этот раздел.

Предупреждая возможные другие вопросы: да, надо писать именно мне. Нет, готовые решения не подходят.

hc ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.