看文档学习分布式进程中遇到了一下问题,文档里面例题是python2.X,我用的python3.x,就出现了一下莫名奇妙的问题,最终版代码先呈上:

taskManager.py

  1. # coding:utf-8
  2. # taskManager.py for windows 服务器端
  3.  
  4. import queue
  5. from multiprocessing.managers import BaseManager
  6. from multiprocessing import freeze_support
  7. # 任务个数
  8. task_number = 10
  9. # 定义收发队列
  10. task_queue = queue.Queue(task_number);
  11. result_queue = queue.Queue(task_number);
  12. def get_task():
  13. return task_queue
  14. def get_result():
  15. return result_queue
  16. #创建类似的QueueManager:
  17. class QueueManager(BaseManager):
  18. pass
  19. def win_run():
  20. # Windows 下绑定调用接口不能使用lambda,所以只能先定义函数再绑定
  21. QueueManager.register('get_task_queue',callable = get_task)
  22. QueueManager.register('get_result_queue',callable=get_result)
  23. #绑定端口并设置验证口令,windows下需要填写IP地址,Linux下不填默认为本地 ip地址为本地ip地址
  24. manager = QueueManager(address = ('192.xxx.xx.xxx',8001),authkey =b'qiye')
  25. # 启动
  26. manager.start()
  27. try:
  28. # 通过网络获取任务队列和结果队列
  29. task = manager.get_task_queue()
  30. result = manager.get_result_queue()
  31. #添加任务
  32. for url in ["ImageUrl_"+str(i) for i in range(10)]:
  33. print('put task %s ...'%url)
  34. task.put(url)
  35. print('try get result...')
  36. for i in range(10):
  37. print('result is %s' %result.get(timeout=10))
  38. except:
  39. print('Manager error')
  40. finally:
  41. # 一定要关闭,否则会报管道未关闭的错误
  42. manager.shutdown()
  43.  
  44. if __name__=='__main__':
  45. # Windows 下多进程可能会有问题,添加这句可以缓解
  46. freeze_support()
  47. win_run()

taskWorker.py

  1. # coding:utf-8
  2. import time
  3. from multiprocessing.managers import BaseManager
  4. # 创建类似的 QueueManager:
  5. class QueueManager(BaseManager):
  6. pass
  7. #第一步: 使用QueueManager注册用于获取Queue的方法名称
  8. QueueManager.register('get_task_queue')
  9. QueueManager.register('get_result_queue')
  10. #第二步:连接到服务器:
  11. server_addr = '192.xxx.xx.xxx'
  12. print('Connect to server %s...'%server_addr)
  13. #端口和验证口令注意保持与服务器进程保持一致:
  14. m = QueueManager(address=(server_addr,8001),authkey=b'qiye')
  15. #从网络连接
  16. m.connect()
  17. #第三部:获取Queue的对象:
  18. task = m.get_task_queue()
  19. result = m.get_result_queue()
  20. #第四步:从task队列获取任务,并把结果写入result队列:
  21. while(not task.empty()):
  22. image_url = task.get(True,timeout = 5)
  23. print('run task download %s ...'%image_url)
  24. time.sleep(1)
  25. result.put('%s--->success'%image_url)
  26. #处理结束
  27. print('worker exit.')

先运行 taskManager.py 服务器端代码,再快速运行 taskWorker.py 客户端代码 运行结果依次如下:

python_分布式进程中遇到的问题的更多相关文章

  1. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

  2. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html Zookeeper 分布式服务框架是 Apa ...

  3. ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们 ...

  4. J2EE分布式事务中的提交、回滚方法调用异常。

    这个是昨天上班的时候,写一个后台程序的调试程序时碰到的问题,和项目经理纠结了一天,最后搞定了.于是今天上班正好闲着,花了几乎一天的时间去网上找各种相关的资料.目前了解的内容如此: 根据使用的weblo ...

  5. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据(转载)

    本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Had ...

  6. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop ...

  7. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  8. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  9. ZooKeeper系列(5):管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...

随机推荐

  1. JPA命名规则

    jpa中方法的命名规则必须按照严格的要求来写.不能随便的命名方法名字,具体的方法操作如下. 参照方法地址:https://blog.csdn.net/csdnchen666666/article/de ...

  2. Flex布局的学习经验

    做为css布局的又一种新方式,Flex拥有极强的使用效果,相比原来的float,position对元素样式的操作更加简洁,本文是我的一点学习经验和心得吧,如有错误以及不足之处,请多多指点. 好进入正题 ...

  3. 高性能JavaScript(字符串和正则表达式)

    字符串连接 +/+=操作符连接 str += "one" + "two"; 这是常用的连接字符串的方法,它运行的时候会经历下面四个步骤: 1.在内存中创建一个临 ...

  4. 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)

    第一个是在 textarea 输入框中添加固定的内容. 代码如下: <textarea id="text" cols="30" rows="10 ...

  5. js的style.display小问题

    在元素添加class样式隐藏display:none; 使用console.log(xx.style.display);//空值

  6. Windows10设置

    按下Win+R键,输入gpedit.msc,打开组策略窗口

  7. DrawerLayout建立侧滑时,显示侧滑页面,底层页面仍可以有点击响应,解决办法。

    第一感觉是下层仍有焦点,解决办法应该是侧方页面出现后,下层页面的焦点改为false,应该是动态去改变焦点的状态,但是不知道如何去实现. 然后再网上找到实现方法,感谢:http://blog.csdn. ...

  8. 2016年,谁是最受欢迎的 Java EE 服务器?

    [编者按]本文作者为性能监控工具 Plumbr 创始人 Nikita Salnikov-tarnovski,主要介绍2016年度最广为使用的 Java EE 容器及其排名变化情况.本文系国内 ITOM ...

  9. windows-oracle 11g dataguard with dgbroker

    一: DG的配置 oracle dg 考验dba综合能力.首先明确3个知识点: SID, SERVICE_NAME,,DB_NAME, DB_UNIQUE_NAME SID: 实例名,用于标识一个数据 ...

  10. python自学——文件打开

    #文件的打开 新建一个文件new file.txt #方法一:f=open("yesterday","r",encoding="utf-8" ...