这篇文章主要介绍了python3爬虫中分布式指的是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
服务进程
我们先来看服务进程,服务进程主要工作:
l 服务进程负责启动Queue
l 把Queue注册到网络上
l 往Queue里面写入任务
我们用代码来看实际效果:
import queue from multiprocessing.managers import BaseManager # 创建task_queue和result_queue对了用来存放任务和结果 task_queue = queue.Queue() result_queue = queue.Queue() class QueueManager(BaseManager): """ 继承BaseManager """ pass # 把创建的两个队列注册到网络上,利用register方法,callable参数关联对象 # 注意windows下绑定调用接口不能使用lambda QueueManager.register('get_task_queue', callable=lambda: task_queue) QueueManager.register('get_result_queue', callable=lambda: result_queue) # 绑定5000端口, 设置密钥 manager = QueueManager(address=('', 5000), authkey=b'abc') # 启动queue,监听通道 manager.start() # 获得通过网络访问的对象,注意分布式进程必须通过manager.get_task_queue()获得的Queue接口添加 task = manager.get_task_queue() result = manager.get_result_queue() # 添加任务 for url in ['url_' + str(i) for i in range(10)]: print('put task %s...' % url) task.put(url) # 获取返回结果 for i in range(10): print('result is %s' % result.get(timeout=10)) # 关闭管理 manager.shutdown() print('master exit')
任务进程
任务进程主要的工作如下:
l 注册获取网络上queue
l 连接服务器
l 从task队列获取任务,并写入结果
示例代码如下:
import time from multiprocessing.managers import BaseManager class QueueManager(BaseManager): """ 继承类BaseManager """ pass # 使用register注册,获取网络queue名称 QueueManager.register('get_task_queue') QueueManager.register('get_result_queue') # 配置服务器ip并连接服务器 server_addr = '127.0.0.1' print('connect to server %s...' % server_addr) m = QueueManager(address=(server_addr, 5000), authkey=b'abc') # 从网络连接 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')
感谢你能够认真阅读完这篇文章,希望小编分享python3爬虫中分布式指的是什么内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。