• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python3爬虫的分布式是什么?

python 搞java代码 3年前 (2022-05-21) 28次浏览 已收录 0个评论

对于本期的文章主题,大家脑海里能不能想到这个名词,或者可不可以想到相关相近的名词呢?其实,小编脑海中就有个印象,对于这个分布式,我想到的是分布式进程,这两者是不是有一定的关系呢?其实,事实上分布式进程就是本期的主题,小伙伴们知道这个内容吗?如果不清楚的话,可以跟着小编一起来了解下了哦~

服务进程

我们先来看服务进程,服务进程主要工作:

服务进程负责启动Queue

Queue注册到网络上

Queue里面写入任务

我们用代码来看实际效果:

import <a href="https://www.gaodaima.com/tag/queue" title="查看更多关于queue的文章" target="_blank">queue</a>
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')

www#gaodaima.com来源gao!%daima.com搞$代*!码$网搞代码

任务进程

任务进程主要的工作如下:

注册获取网络上queue

连接服务器

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')

大家会不会觉得以上内容非常简单?也不知道要如何去应用,其实大家如果仔细观察的话,可以看我多个进程,可以把任务分配多台机器上,这个就是分布式存在的意义哦~多看几遍,好好掌握住吧~

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python3爬虫的分布式是什么?
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址