天天看点

python 分布式进程通信

python 分布式进程通信
task_master.txt
python 分布式进程通信
task_worker.txt

点击(此处)折叠或打开

  1. #!/usr/bin/env python3
  2. #-*- coding:utf-8 -*-
  3. '''
  4. import time,random,queue
  5. from multiprocessing.managers import BaseManager
  6. task_queue = queue.Queue()
  7. result_queue = queue.Queue()
  8. class QueueManager(BaseManager):
  9.     pass
  10. QueueManager.register('get_task_queue', callable=lambda: task_queue)
  11. QueueManager.register('get_result_queue', callable=lambda: result_queue)
  12. manager = QueueManager(address=('', 5000), authkey=b'talen')
  13. manager.start()
  14. task = manager.get_task_queue()
  15. result = manager.get_result_queue()
  16. for i in range(10):
  17.     n = random.randint(0,9000)
  18.     print('Put task %d' % n)
  19.     task.put(n)
  20.     r=result.get(timeout=10)
  21.     print("Result : %s " % r)
  22. manager.shutdown()
  23. print('master exit.')
  1. import time, queue, sys
  2. class QueueManger(BaseManager):
  3. QueueManger.register('get_task_queue')
  4. QueueManger.register('get_result_queue')
  5. server_addr='127.0.0.1'
  6. print('Connect to server %s '% server_addr)
  7. m=QueueManger(address=(server_addr,5000), authkey=b'talen')
  8. m.connect()
  9. task=m.get_task_queue()
  10. result=m.get_result_queue()
  11.     try:
  12.         n=task.get(timeout=1)
  13.         print('run task %d * %d ...' %(n,n))
  14.         r='%d * %d = %d' % (n,n,n*n)
  15.         time.sleep(1)
  16.         result.put(r)
  17.     except Queue.Empty:
  18.         print('task queue is empty')
  19. print('worker exit.')

t@localhost untitled$ python3 task_master.py 

Put task 6811

Put task 5164

Put task 8492

Put task 177

Put task 5496

Put task 8724

Put task 6422

Put task 2887

Put task 287

Put task 876

Result : 6811 * 6811 = 46389721 

Result : 5164 * 5164 = 26666896 

Result : 8492 * 8492 = 72114064 

Result : 177 * 177 = 31329 

Result : 5496 * 5496 = 30206016 

Result : 8724 * 8724 = 76108176 

Result : 6422 * 6422 = 41242084 

Result : 2887 * 2887 = 8334769 

Result : 287 * 287 = 82369 

Result : 876 * 876 = 767376 

master exit.

t@localhost untitled$ 

t@localhost untitled$ python3 task_worker.py 

Connect to server 127.0.0.1 

run task 6811 * 6811 ...

run task 5164 * 5164 ...

run task 8492 * 8492 ...

run task 177 * 177 ...

run task 5496 * 5496 ...

run task 8724 * 8724 ...

run task 6422 * 6422 ...

run task 2887 * 2887 ...

run task 287 * 287 ...

run task 876 * 876 ...

worker exit.

参考学习:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000#0