文档章节

利用Queue和managers实现分布式进程

acutesun
 acutesun
发布于 2017/07/23 16:02
字数 517
阅读 3
收藏 0
点赞 0
评论 0

multiprocessing模块中的managers子模块支持把多进程分布到多台机器上。
首先编写服务进程,服务进程负责把任务写入task_queue, 并接收工作进程返回的result_queue
serverManager.py:

from multiprocessing.managers import BaseManager,Queue

# 1. 建立task_queue和result_queue, 用来存放任务和结果
task_queue = Queue()
result_queue = Queue()


class QueueManager(BaseManager):
    pass

# 2. 把创建的队列注册在网络上,利用register方法, callable 参数关联类Queue对象
QueueManager.register('get_task_queue', callable=lambda: task_queue)
QueueManager.register('get_result_queue', callable=lambda: result_queue)

# 3.绑定端口8000, 验证口令'123'
manager = QueueManager(address=('', 8000), authkey='123'.encode('utf-8'))
manager.start()

# 4. 通过manager获取网络注册的Queue对象
task = manager.get_task_queue()
result = manager.get_result_queue()

# 5.添加任务
for url in ["imageUrl_" + str(i) for i in range(10)]:
    print('put task %s...' % url)
    task.put(url)

# 6.获取返回结果
print('get result...')

for i in range(10):
    print('result is %s' % result.get(timeout=10))

manager.shutdown()

工作进程通过网络获取任务队列task_queue, 对任务队列中的数据进行处理后写入result_queue

workerManager.py:

import time
from multiprocessing.managers import BaseManager


class QueueManager(BaseManager):
    pass

# 1.注册获取queue
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')

# 2.连接服务器
server_addr = '127.0.0.1'
print('connect to server')
mng = QueueManager(address=(server_addr, 8000), authkey='123'.encode('utf-8'))

# 连接
mng.connect()
# 3. 获取queue对象
task = mng.get_task_queue()
result = mng.get_result_queue()

# 4.从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 finish!')

首先运行服务进程,得到结果:

put task imageUrl_0...
put task imageUrl_1...
put task imageUrl_2...
put task imageUrl_3...
put task imageUrl_4...
put task imageUrl_5...
put task imageUrl_6...
put task imageUrl_7...
put task imageUrl_8...
put task imageUrl_9...
get result...

然后运行工作进程

connect to server
run task download imageUrl_0 ...
run task download imageUrl_1 ...
run task download imageUrl_2 ...
run task download imageUrl_3 ...
run task download imageUrl_4 ...
run task download imageUrl_5 ...
run task download imageUrl_6 ...
run task download imageUrl_7 ...
run task download imageUrl_8 ...
run task download imageUrl_9 ...
worker finish!

最后服务进程输出

result is imageUrl_0--->success
result is imageUrl_1--->success
result is imageUrl_2--->success
result is imageUrl_3--->success
result is imageUrl_4--->success
result is imageUrl_5--->success
result is imageUrl_6--->success
result is imageUrl_7--->success
result is imageUrl_8--->success
result is imageUrl_9--->success

© 著作权归作者所有

共有 人打赏支持
acutesun
粉丝 0
博文 71
码字总数 83152
作品 0
程序员
运维学python之爬虫中级篇(三)分布式进程

相对线程来说,进程更稳定一些,线程只是在同一台机器上利用多CPU,无法实现不同机器的共享,而多进程则可以实现分布到不同机器去运行,应用到爬虫上,就例如:我们要爬取网站图片,如果使用...

578384
01/07
0
0
运维学python之爬虫中级篇(一)进程

最近流感肆虐京城,各大医院爆满,不巧我也被病毒击中, 起初咳嗽小感冒喝了点感冒冲剂以为可以扛过去,结果发展为嗓子干哑,最后又开始发烧,折腾好几天,没办法去医院走了一圈花了大洋,也...

578384
01/05
0
0
Python-多线程与并行计算

Python-多线程与并行计算 饿死我了。。。。今天看图像处理cuda的时候看到了并行计算,又恰巧参加第二届CCF举办CCSP比赛的时候,第五题是可以并行计算的。。。在赛后分享上,听清华大佬讲得栩...

googler_offer
2017/11/21
0
0
Python爬虫进阶六之多进程的用法

前言 在上一节中介绍了thread多线程库。python中的多线程其实并不是真正的多线程,并不能做到充分利用多核CPU资源。 如果想要充分利用,在python中大部分情况需要使用多进程,那么这个包就叫...

_周小董
2017/12/24
0
0
数据分发和集群平台 - Hazelcast

Hazelcast是一个高度可扩展的数据分发和集群平台,可用于实现分布式数据存储、数据缓存。特性包括: 提供java.util.{Queue, Set, List, Map}分布式实现。 提供java.util.concurrency.locks.L...

匿名
2009/10/17
25.2K
5
老陌/PHP Redis Queue

#PHP Redis Queue 这是一个可以扩展的队列处理程序,没有使用框架。我们的项目使用Yii的框架,所有这里的测试示例就按照Yii的方式来编写的。 ###简要设计思路 存入的将数据分散到64个Redis的...

老陌
2015/07/07
0
0
Hazelcast 3.3 发布,性能提升约达 2 倍

Hazelcast 3.3 发布了,Hazelcast是一个高度可扩展的数据分发和集群平台,可用于实现分布式数据存储、数据缓存。该版本在性能上得以继续提升,提升接近两倍左右。详情请看发行说明。 Hazelc...

oschina
2014/09/19
7K
7
Hazelcast 3.5 发布,数据分发和集群平台

Hazelcast 3.5 在6月26日时发布了,该版本继续在性能和稳定性方面做了大幅提升,同时还包含了不少新特性,详细介绍请看发行说明。 Hazelcast是一个高度可扩展的数据分发和集群平台,可用于实...

oschina
2015/06/26
1K
1
一分钟实现分布式锁

一、缘起 分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式环境下的临界资源做...

武祖林动
2017/06/16
307
4
跟我学习dubbo-消息中间件在分布式系统中的作用介绍(8)

消息中间件在分布式系统中的作用介绍 消息中间件的定义 Message-oriented middleware (MOM) issoftware infrastructure focused on sending and receiving messagesbetween distributed sys......

HI曲奇饼干
2016/01/18
286
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CoreText进阶(七)-添加自定义View和对其

CoreText进阶(七)-添加自定义View和对其 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更多...

aron1992
6分钟前
0
0
Python爬虫 爬取百合网的女人们和男人们

学Python也有段时间了,目前学到了Python的类。个人感觉Python的类不应称之为类,而应称之为数据类型,只是数据类型而已!只是数据类型而已!只是数据类型而已!重要的事情说三篇。 据书上说...

p柯西
18分钟前
0
0
在Java中,你真的会日期转换吗

1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormatis a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows fo......

Java小铺
27分钟前
0
0
Linux系统梳理---系统搭建(二):tomcat的安装和使用

上一章讲到JDK的安装使用,这一章主要记录下服务器tomcat的安装以及部署一个项目. 1.下载tomcat,这里下载的是apache-tomcat-8.5.32.tar.gz 2.创建文件夹,便于管理,和JDK一样,在usr目录下创建t...

勤奋的蚂蚁
37分钟前
0
0
ES15-聚合

1.Terms Aggregation 分组聚合 2.Filter Aggregation 过滤聚合

贾峰uk
38分钟前
0
0
【2018.07.19学习笔记】【linux高级知识 20.27-20.30】

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数

lgsxp
41分钟前
0
0
10.32/10.33 rsync通过服务同步~10.35 screen工具

通过服务的方式同步要编辑配置文件:[root@linux-xl ~]# vim /etc/rsyncd.confport=873log file=/var/log/rsync.logpid file=/var/run/rsyncd.pidaddress=192.168.43.21[tes...

洗香香
44分钟前
0
0
与女儿谈商业模式 (3):沃尔玛的成功模式

分类:与女儿谈商业模式 | 标签: 经济学 沃尔玛 陈志武 2007-05-10 09:09阅读(11279)评论(30) 与女儿谈商业模式 (3):沃尔玛的成功模式 陈志武 /文 沃尔玛(Wal-Mart)是另一个有意思的财...

祖冲之
51分钟前
0
0
网页加载速度优化方法总结

1、减少请求 最大的性能漏洞就是一个页面需要发起几十个网络请求来获取诸如样式表、脚本或者图片这样的资源,这个在相对低带宽和高延迟的移动设备连接上来说影响更严重。 2、整合资源 对开发...

Jack088
56分钟前
0
0
dubbo学习

https://blog.csdn.net/houshaolin/article/details/76408399

喵五郎
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部