(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不一致,肯定连接不上。
(编辑:ASP站长网)
|