Я еще не экспериментировал с многопроцессорной обработкой в версии 2.6, но я много играл с pyprocessing (как его называли в 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/
Вы можете использовать фрагмент кода, который включает объекты Queue. – jfs 2008-12-05 01:00:47