设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Python分布式进程中你会遇到的坑(4)

发布时间:2019-05-29 03:12 所属栏目:21 来源:编程思录
导读:(1)task_master.py运行结果如下 start! Puttask7872... Puttask6931... Puttask1395... Puttask8477... Puttask8300... Puttask1597... Puttask8738... Puttask8627... Puttask1884... Puttask2561... Trygetresult

(1)task_master.py运行结果如下

  1. start! 
  2. Put task 7872... 
  3. Put task 6931... 
  4. Put task 1395... 
  5. Put task 8477... 
  6. Put task 8300... 
  7. Put task 1597... 
  8. Put task 8738... 
  9. Put task 8627... 
  10. Put task 1884... 
  11. Put task 2561... 
  12. Try get results... 
  13. Result: 7872 * 7872 = 61968384 
  14. Result: 6931 * 6931 = 48038761 
  15. Result: 1395 * 1395 = 1946025 
  16. Result: 8477 * 8477 = 71859529 
  17. Result: 8300 * 8300 = 68890000 
  18. Result: 1597 * 1597 = 2550409 
  19. Result: 8738 * 8738 = 76352644 
  20. Result: 8627 * 8627 = 74425129 
  21. Result: 1884 * 1884 = 3549456 
  22. Result: 2561 * 2561 = 6558721 
  23. master exit. 

(2)task_worker.py运行结果如下

  1. Connect to server 127.0.0.1... 
  2. run task 8640 * 8640... 
  3. run task 7418 * 7418... 
  4. run task 9303 * 9303... 
  5. run task 568 * 568... 
  6. run task 1633 * 1633... 
  7. run task 3583 * 3583... 
  8. run task 3293 * 3293... 
  9. run task 8975 * 8975... 
  10. run task 8189 * 8189... 
  11. run task 731 * 731... 
  12. worker exit. 

知识补充

这个简单的Master/Worker模型有什么用?其实这就是一个简单但真正的分布式计算,把代码稍加改造,启动多个worker,就可以把任务分布到几台甚至几十台机器上,比如把计算n*n的代码换成发送邮件,就实现了邮件队列的异步发送。

Queue对象存储在哪?注意到task_worker.py中根本没有创建Queue的代码,所以,Queue对象存储在task_master.py进程中:

Python分布式进程中你会遇到的坑

而Queue之所以能通过网络访问,就是通过QueueManager实现的。由于QueueManager管理的不止一个Queue,所以,要给每个Queue的网络调用接口起个名字,比如get_task_queue。task_worker这里的QueueManager注册的名字必须和task_manager中的一样。对比上面的例子,可以看出Queue对象从另一个进程通过网络传递了过来。只不过这里的传递和网络通信由QueueManager完成。

authkey有什么用?这是为了保证两台机器正常通信,不被其他机器恶意干扰。如果task_worker.py的authkey和task_master.py的authkey不一致,肯定连接不上。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读