#!/usr/bin/env python import multiprocessing from multiprocessing.managers import BaseManager import multiprocessing.util import queue import threading address = ('127.0.0.1', 5000) # Server part class Server(BaseManager): pass def serve(): q = queue.Queue() Server.register('get_queue', callable=(lambda: q)) manager = Server(address=address) server = manager.get_server() thread = threading.Thread(target=server.serve_forever) thread.daemon = True thread.start() serve() # Client part class Client(BaseManager): pass Client.register('get_queue') manager = Client(address=address) manager.connect() for i in range(10): def run(): queue = manager.get_queue() queue.put('hello') thread = threading.Thread(target=run) thread.daemon = True thread.start() thread.join() for k, v in multiprocessing.util._afterfork_registry.items(): print('%s: %s' % (k, v))