最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python3爬虫的分布式是什么?

    正文概述    2020-01-08   275

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

    服务进程

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

    服务进程负责启动Queue

    Queue注册到网络上

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

    任务进程

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

    注册获取网络上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')

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


    起源地下载网 » python3爬虫的分布式是什么?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元