Общение во всех потоках в Python - PullRequest
1 голос
/ 31 марта 2012

Спасибо за внимание

Я пишу движок симуляции в Python, используя модуль "Threading" в Python. Одна из вещей, которую должен делать мой симулятор, - уметь общаться на все. Предположим, что существует n потоков (все n потоков не являются экземплярами одного и того же класса).

Так, например, у меня есть 3 класса потоков

  • m является экземпляром класса «Хранилище»
  • s является экземпляром класса 'Super'
  • c1, c2 ... cn являются экземплярами типа класса 'Child'

m, s, c1, c2, ... cn, возможно, придется общаться друг с другом 1: 1. Разумно ли поддерживать непосредственное соединение друг с другом? Мое решение состоит в создании потока арбитра, который будет принимать сообщения и направлять их в целевой поток. Таким образом, у меня будет меньше труб. Как вы думаете, это хорошая идея?

Существует ли готовый модуль / решение python, способный выполнять такого рода арбитраж?

RRS

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Я думаю, что ваше решение для вещания Queue и потока EventBus является наиболее распространенным шаблоном.Queue является частью стандартной библиотеки, и поток, который использует одноэлементную очередь и осуществляет широковещательную передачу для зарегистрированных потребителей, является тривиальным для реализации.

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

1 голос
/ 01 апреля 2012

Я думаю, вам стоит взглянуть на расширение для передачи сообщений "candygram".

...