CSDN23楼http://bbs.csdn.net/topics/390869705/
#task_master.py #server,往任务队列中放任务后, 从结果队列中获取结果 import random, time, queue from multiprocessing.managers import BaseManager from multiprocessing import freeze_support #发送任务的队列 task_queue = queue.Queue() #接收结果的队列 result_queue = queue.Queue() class QueueManager(BaseManager): pass def return_task_queue(): global task_queue return task_queue def return_result_queue(): global result_queue return result_queue #注册到网络 def start_server(): QueueManager.register('get_task_queue', callable = return_task_queue) QueueManager.register('get_result_queue', callable = return_result_queue) manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc') manager.start() task = manager.get_task_queue() result = manager.get_result_queue() for i in range(10): n = random.randint(0, 10000) print ('Put task %d...' % n) task.put(n) print ('Try get results...') for i in range(10): r = result.get(timeout = 10) print ('Result: %s' % r) manager.shutdown() print ('master exit.') if __name__ == '__main__': freeze_support() start_server()
# task_worker.py #客户端,从服务器的任务队列中获取任务,进行计算并放入结果队列 import time, sys, queue from multiprocessing.managers import BaseManager from multiprocessing import freeze_support class QueueManager(BaseManager): pass def start_cal(): QueueManager.register('get_task_queue') QueueManager.register('get_result_queue') server_addr = '127.0.0.1' print ('Connect to server %s ...' % server_addr) m = QueueManager(address = (server_addr, 5000), authkey = b'abc') m.connect() task = m.get_task_queue() result = m.get_result_queue() for i in range(10): try: n = task.get(timeout = 1) print ('Run task %d * %d' % (n, n)) r = '%d * %d = %d' % (n, n, n * n) time.sleep(1) result.put(r) except Queue.Empty: print ('task queue is empty.') print ('worker exit.') if __name__ == '__main__': freeze_support() start_cal()
Sign in to make a reply
每天帅醒的胡子叔叔
win7 x64
参考了同学们的答案和CSDN
CSDN23楼http://bbs.csdn.net/topics/390869705/
server
client