Я еще не экспериментировал с мультипроцессором в 2.6, но я много играл с пиропроцессором (как это называлось в 2.5).
Я вижу, что вы ищете несколько процессов, каждый из которых порождает набор потоков соответственно.
Поскольку вы используете многопроцессорный модуль, я предлагаю использовать многопроцессорный, а не многопоточный подход, вы будете сталкиваться с меньшими проблемами, такими как взаимоблокировки и т. Д.
Создать объект очереди. http://pyprocessing.berlios.de/doc/queue-objects.html
Для создания многопроцессорной среды используйте пул: http://pyprocessing.berlios.de/doc/pool-objects.html, который будет управлять рабочими процессами за вас. Затем вы можете применить асинхронный / синхронный к работникам, а также можете добавить обратный вызов для каждого работника, если это необходимо. Но помните, что обратный вызов - это обычный блок кода, и он должен немедленно вернуться (как указано в документации)
Некоторая дополнительная информация:
При необходимости создайте менеджер http://pyprocessing.berlios.de/doc/manager-objects.html для управления доступом к объекту очереди. Вы должны будете сделать объект очереди доступным для этого. Но преимущество в том, что после совместного использования и управления вы можете получить доступ к этой общей очереди по всей сети, создав прокси-объекты. Это позволит вам вызывать методы объекта централизованной общей очереди как (очевидно) собственные методы на любом сетевом узле.
вот пример кода из документации
Можно запустить сервер менеджера на одном компьютере, и клиенты могут использовать его с других компьютеров (при условии, что соответствующие брандмауэры позволяют это).
Выполнение следующих команд создает сервер для общей очереди, который могут использовать удаленные клиенты:
>>> from processing.managers import BaseManager, CreatorMethod
>>> import Queue
>>> queue = Queue.Queue()
>>> class QueueManager(BaseManager):
... get_proxy = CreatorMethod(callable=lambda:queue, typeid='get_proxy')
...
>>> m = QueueManager(address=('foo.bar.org', 50000), authkey='none')
>>> m.serve_forever()
Один клиент может получить доступ к серверу следующим образом:
>>> from processing.managers import BaseManager, CreatorMethod
>>> class QueueManager(BaseManager):
... get_proxy = CreatorMethod(typeid='get_proxy')
...
>>> m = QueueManager.from_address(address=('foo.bar.org', 50000), authkey='none')
>>> queue = m.get_proxy()
>>> queue.put('hello')
Если вы настаиваете на безопасном материале с резьбой, PEP371 (многопроцессорная обработка) ссылается на это http://code.google.com/p/python-safethread/