python_分布式进程中遇到的问题
看文档学习分布式进程中遇到了一下问题,文档里面例题是python2.X,我用的python3.x,就出现了一下莫名奇妙的问题,最终版代码先呈上:
taskManager.py
- # coding:utf-8
- # taskManager.py for windows 服务器端
- import queue
- from multiprocessing.managers import BaseManager
- from multiprocessing import freeze_support
- # 任务个数
- task_number = 10
- # 定义收发队列
- task_queue = queue.Queue(task_number);
- result_queue = queue.Queue(task_number);
- def get_task():
- return task_queue
- def get_result():
- return result_queue
- #创建类似的QueueManager:
- class QueueManager(BaseManager):
- pass
- def win_run():
- # Windows 下绑定调用接口不能使用lambda,所以只能先定义函数再绑定
- QueueManager.register('get_task_queue',callable = get_task)
- QueueManager.register('get_result_queue',callable=get_result)
- #绑定端口并设置验证口令,windows下需要填写IP地址,Linux下不填默认为本地 ip地址为本地ip地址
- manager = QueueManager(address = ('192.xxx.xx.xxx',8001),authkey =b'qiye')
- # 启动
- manager.start()
- try:
- # 通过网络获取任务队列和结果队列
- task = manager.get_task_queue()
- result = manager.get_result_queue()
- #添加任务
- for url in ["ImageUrl_"+str(i) for i in range(10)]:
- print('put task %s ...'%url)
- task.put(url)
- print('try get result...')
- for i in range(10):
- print('result is %s' %result.get(timeout=10))
- except:
- print('Manager error')
- finally:
- # 一定要关闭,否则会报管道未关闭的错误
- manager.shutdown()
- if __name__=='__main__':
- # Windows 下多进程可能会有问题,添加这句可以缓解
- freeze_support()
- win_run()
taskWorker.py
- # coding:utf-8
- import time
- from multiprocessing.managers import BaseManager
- # 创建类似的 QueueManager:
- class QueueManager(BaseManager):
- pass
- #第一步: 使用QueueManager注册用于获取Queue的方法名称
- QueueManager.register('get_task_queue')
- QueueManager.register('get_result_queue')
- #第二步:连接到服务器:
- server_addr = '192.xxx.xx.xxx'
- print('Connect to server %s...'%server_addr)
- #端口和验证口令注意保持与服务器进程保持一致:
- m = QueueManager(address=(server_addr,8001),authkey=b'qiye')
- #从网络连接
- m.connect()
- #第三部:获取Queue的对象:
- task = m.get_task_queue()
- result = m.get_result_queue()
- #第四步:从task队列获取任务,并把结果写入result队列:
- while(not task.empty()):
- image_url = task.get(True,timeout = 5)
- print('run task download %s ...'%image_url)
- time.sleep(1)
- result.put('%s--->success'%image_url)
- #处理结束
- print('worker exit.')
先运行 taskManager.py 服务器端代码,再快速运行 taskWorker.py 客户端代码 运行结果依次如下:
python_分布式进程中遇到的问题的更多相关文章
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...
- ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们 ...
- J2EE分布式事务中的提交、回滚方法调用异常。
这个是昨天上班的时候,写一个后台程序的调试程序时碰到的问题,和项目经理纠结了一天,最后搞定了.于是今天上班正好闲着,花了几乎一天的时间去网上找各种相关的资料.目前了解的内容如此: 根据使用的weblo ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)
本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...
- ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作
前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...
- 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...
- ZooKeeper系列(5):管理分布式环境中的数据
引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...
随机推荐
- JPA命名规则
jpa中方法的命名规则必须按照严格的要求来写.不能随便的命名方法名字,具体的方法操作如下. 参照方法地址:https://blog.csdn.net/csdnchen666666/article/de ...
- Flex布局的学习经验
做为css布局的又一种新方式,Flex拥有极强的使用效果,相比原来的float,position对元素样式的操作更加简洁,本文是我的一点学习经验和心得吧,如有错误以及不足之处,请多多指点. 好进入正题 ...
- 高性能JavaScript(字符串和正则表达式)
字符串连接 +/+=操作符连接 str += "one" + "two"; 这是常用的连接字符串的方法,它运行的时候会经历下面四个步骤: 1.在内存中创建一个临 ...
- 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)
第一个是在 textarea 输入框中添加固定的内容. 代码如下: <textarea id="text" cols="30" rows="10 ...
- js的style.display小问题
在元素添加class样式隐藏display:none; 使用console.log(xx.style.display);//空值
- Windows10设置
按下Win+R键,输入gpedit.msc,打开组策略窗口
- DrawerLayout建立侧滑时,显示侧滑页面,底层页面仍可以有点击响应,解决办法。
第一感觉是下层仍有焦点,解决办法应该是侧方页面出现后,下层页面的焦点改为false,应该是动态去改变焦点的状态,但是不知道如何去实现. 然后再网上找到实现方法,感谢:http://blog.csdn. ...
- 2016年,谁是最受欢迎的 Java EE 服务器?
[编者按]本文作者为性能监控工具 Plumbr 创始人 Nikita Salnikov-tarnovski,主要介绍2016年度最广为使用的 Java EE 容器及其排名变化情况.本文系国内 ITOM ...
- windows-oracle 11g dataguard with dgbroker
一: DG的配置 oracle dg 考验dba综合能力.首先明确3个知识点: SID, SERVICE_NAME,,DB_NAME, DB_UNIQUE_NAME SID: 实例名,用于标识一个数据 ...
- python自学——文件打开
#文件的打开 新建一个文件new file.txt #方法一:f=open("yesterday","r",encoding="utf-8" ...