| 
                         (1)task_master.py运行结果如下 
- start! 
 - Put task 7872... 
 - Put task 6931... 
 - Put task 1395... 
 - Put task 8477... 
 - Put task 8300... 
 - Put task 1597... 
 - Put task 8738... 
 - Put task 8627... 
 - Put task 1884... 
 - Put task 2561... 
 - Try get results... 
 - Result: 7872 * 7872 = 61968384 
 - Result: 6931 * 6931 = 48038761 
 - Result: 1395 * 1395 = 1946025 
 - Result: 8477 * 8477 = 71859529 
 - Result: 8300 * 8300 = 68890000 
 - Result: 1597 * 1597 = 2550409 
 - Result: 8738 * 8738 = 76352644 
 - Result: 8627 * 8627 = 74425129 
 - Result: 1884 * 1884 = 3549456 
 - Result: 2561 * 2561 = 6558721 
 - master exit. 
 
  
(2)task_worker.py运行结果如下 
- Connect to server 127.0.0.1... 
 - run task 8640 * 8640... 
 - run task 7418 * 7418... 
 - run task 9303 * 9303... 
 - run task 568 * 568... 
 - run task 1633 * 1633... 
 - run task 3583 * 3583... 
 - run task 3293 * 3293... 
 - run task 8975 * 8975... 
 - run task 8189 * 8189... 
 - run task 731 * 731... 
 - worker exit. 
 
  
知识补充 
这个简单的Master/Worker模型有什么用?其实这就是一个简单但真正的分布式计算,把代码稍加改造,启动多个worker,就可以把任务分布到几台甚至几十台机器上,比如把计算n*n的代码换成发送邮件,就实现了邮件队列的异步发送。 
Queue对象存储在哪?注意到task_worker.py中根本没有创建Queue的代码,所以,Queue对象存储在task_master.py进程中: 
 
而Queue之所以能通过网络访问,就是通过QueueManager实现的。由于QueueManager管理的不止一个Queue,所以,要给每个Queue的网络调用接口起个名字,比如get_task_queue。task_worker这里的QueueManager注册的名字必须和task_manager中的一样。对比上面的例子,可以看出Queue对象从另一个进程通过网络传递了过来。只不过这里的传递和网络通信由QueueManager完成。 
authkey有什么用?这是为了保证两台机器正常通信,不被其他机器恶意干扰。如果task_worker.py的authkey和task_master.py的authkey不一致,肯定连接不上。 
                         (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |