文档章节

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

acutesun
 acutesun
发布于 2017/07/23 16:02
字数 517
阅读 3
收藏 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

© 著作权归作者所有

共有 人打赏支持
上一篇: sqlite3 的使用
下一篇: python拷贝
acutesun
粉丝 0
博文 71
码字总数 83152
作品 0
程序员
私信 提问
运维学python之爬虫中级篇(三)分布式进程

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

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

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

578384
2018/01/05
0
0
Python爬虫进阶六之多进程的用法

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

_周小董
2017/12/24
0
0
python之并发编程(线程\进程\协程)

一、进程和线程 1.进程 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资...

菜鸟小于
2018/08/19
0
0
day24系统编程

1python系统编程 1.1进程 1.1.1多任务的引入 单任务: 多任务: 说明: ·程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程 ·然后父进程和...

AAA年华
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

外教比较

确定收费的模式 确定授课的模式 确定教学的方式-用什么样的方式能让人更快更好的学会 确定核心竞争力-比如我们的师资是牛津大学的 英语流利说 收费的模式-报特色课程,比如训练营之类的,其实...

V字仇杀
11分钟前
1
0
上下文无关文法介绍

上下文无关文法 上下文无关文法是用来描述程序语言的一种表达方式,通过简单的符号描述语言的集合。正如我们所知道,一个程序即为一个句子(字符串),语言就是所有句子的集合。上下文无关文...

陶小陶
20分钟前
3
0
eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
今天
1
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
今天
4
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部