想用Python爬小姐姐图片?那你得先搞定分布式进程 !

pua肆虐?运用python进行图片文字识别得到“所谓pua导师”热卖作品列表,然后用分布式爬虫全网采集,起底各pua! 回 复潘多拉 送 你 一 个 特 别 推 送 用数据揭穿pua的真面目,python奥利给! 用python可以做好多好玩的事情,比如说我之前做的,新型冠状病毒疫情之下,采集央视网新联频道,生成词云,看民众最当下最关注什么。用python的requests模块采集央视网新联频道,制做新型冠状病毒战役季热点词云。 当然这还不是最好玩的,我之前有发表过文章情感操控术——如何不被渣... 阅读详情

分布式进程在Python中依然要用到multiprocessing模块。multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。可以写一个服务进程作为调度者,将任务分布到其他多个进程中,依靠网络通信进行管理。

举个例子:在做爬虫程序时,常常会遇到这样的场景,我们想抓取某个网站的所有图片,如果使用多进程的话,一般是一个进程负责抓取图片的链接地址,将链接地址存放到Queue中,另外的进程负责从Queue中读取链接地址进行下载和存储到本地。

现在把这个过程做成分布式,一台机器上的进程负责抓取链接,其他机器上的进程负责下载存储。那么遇到的主要问题是将Queue暴露到网络中,让其他机器进程都可以访问,分布式进程就是将这一个过程进行了封装,我们可以将这个过程称为本地队列的网络化。整体过程如图1-24所示。

 

 

 

 

 

▲图1-24 分布式进程

要实现上面例子的功能,创建分布式进程需要分为六个步骤:

  1. 建立队列Queue,用来进行进程间的通信。服务进程创建任务队列task_queue,用来作为传递任务给任务进程的通道;服务进程创建结果队列result_queue,作为任务进程完成任务后回复服务进程的通道。在分布式多进程环境下,必须通过由Queuemanager获得的Queue接口来添加任务。
  2. 把第一步中建立的队列在网络上注册,暴露给其他进程(主机),注册后获得网络队列,相当于本地队列的映像。
  3. 建立一个对象(Queuemanager(BaseManager))实例manager,绑定端口和验证口令。
  4. 启动第三步中建立的实例,即启动管理manager,监管信息通道。
  5. 通过管理实例的方法获得通过网络访问的Queue对象,即再把网络队列实体化成可以使用的本地队列。
  6. 创建任务到“本地”队列中,自动上传任务到网络队列中,分配给任务进程进行处理。

接下来通过程序实现上面的例子(Linux版),首先编写的是服务进程(taskManager.py),代码如下:

import random,time,Queue  Python学习交流群:1004391443
from multiprocessing.managers import BaseManager
# 第一步:建立task_queue和result_queue,用来存放任务和结果
task_queue=Queue.Queue()
result_queue=Queue.Queue()
class Queuemanager(BaseManager):
    pass
# 第二步:把创建的两个队列注册在网络上,利用register方法,callable参数关联了Queue对象,
# 将Queue对象在网络中暴露
Queuemanager.register('get_task_queue',callable=lambda:task_queue)
Queuemanager.register('get_result_queue',callable=lambda:result_queue)
# 第三步:绑定端口8001,设置验证口令‘qiye’。这个相当于对象的初始化
manager=Queuemanager(address=('',8001),authkey='qiye')
# 第四步:启动管理,监听信息通道
manager.start()
# 第五步:通过管理实例的方法获得通过网络访问的Queue对象
task=manager.get_task_queue()
result=manager.get_result_queue()
# 第六步:添加任务
for url in ["ImageUrl_"+i for i in range(10)]:
    print 'put task %s ...' %url
    task.put(url)
# 获取返回结果
print 'try get result...'
for i in range(10):
    print 'result is %s' %result.get(timeout=10)
# 关闭管理
manager.shutdown()

 

任务进程已经编写完成,接下来编写任务进程(taskWorker.py),创建任务进程的步骤相对较少,需要四个步骤:

  1. 使用QueueManager注册用于获取Queue的方法名称,任务进程只能通过名称来在网络上获取Queue。
  2. 连接服务器,端口和验证口令注意保持与服务进程中完全一致。
  3. 从网络上获取Queue,进行本地化。
  4. 从task队列获取任务,并把结果写入result队列。

程序taskWorker.py代码(win/linux版)如下:

# coding:utf-8
import time
from multiprocessing.managers import BaseManager
# 创建类似的QueueManager:
class QueueManager(BaseManager):
    pass
# 第一步:使用QueueManager注册用于获取Queue的方法名称
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
# 第二步:连接到服务器:
server_addr = '127.0.0.1'
print('Connect to server %s...' % server_addr)
# 端口和验证口令注意保持与服务进程完全一致:
m = QueueManager(address=(server_addr, 8001), authkey='qiye')
# 从网络连接:
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.')

 

最后开始运行程序,先启动服务进程taskManager.py,运行结果如下:

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 ...
try get result...

 

接着再启动任务进程taskWorker.py,运行结果如下:

Connect to server 127.0.0.1...
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 exit.

 

当任务进程运行结束后,服务进程运行结果如下:

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

其实这就是一个简单但真正的分布式计算,把代码稍加改造,启动多个worker,就可以把任务分布到几台甚至几十台机器上,实现大规模的分布式爬虫。

注:由于平台的特性,创建服务进程的代码在Linux和Windows上有一些不同,创建工作进程的代码是一致的。

taskManager.py程序在Windows版下的代码如下:

# coding:utf-8
# taskManager.py for windows
import Queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
# 任务个数
task_number = 10
# 定义收发队列
task_queue = Queue.Queue(task_number);
result_queue = Queue.Queue(task_number);
def get_task():
    return task_queue
def get_result():
    return result_queue
# 创建类似的QueueManager:
class QueueManager(BaseManager):
    pass
def win_run():
    # Windows下绑定调用接口不能使用lambda,所以只能先定义函数再绑定
    QueueManager.register('get_task_queue',callable = get_task)
    QueueManager.register('get_result_queue',callable = get_result)
    # 绑定端口并设置验证口令,Windows下需要填写IP地址,Linux下不填默认为本地
    manager = QueueManager(address = ('127.0.0.1',8001),authkey = 'qiye')
    # 启动
    manager.start()
    try:
        # 通过网络获取任务队列和结果队列
        task = manager.get_task_queue()
        result = manager.get_result_queue()
        # 添加任务
        for url in ["ImageUrl_"+str(i) for i in range(10)]:
            print 'put task %s ...' %url
            task.put(url)
        print 'try get result...'
        for i in range(10):
            print 'result is %s' %result.get(timeout=10)
    except:
        print('Manager error')
    finally:
        # 一定要关闭,否则会报管道未关闭的错误
        manager.shutdown()
if __name__ == '__main__':
    # Windows下多进程可能会有问题,添加这句可以缓解
    freeze_support()
    win_run()
分分钟自制人脸识别(如何快速识别心仪的小姐姐~) 文章目录环境使用的函数接口流程 环境 1.python 3.7 2.opencv pip3 install opencv-python 使用的函数接口 import cv2 as cv cv.imread() #读取图片 cv.cvtColot() #图片颜色处理(灰度处理) cv.imwrite() #保存图片 cv.imshow() #展示图片 cv.waitKey() #窗口展示停留 cv.resize() #修改图片大小 cv.rectangle() #绘制矩形 cv.circle() #绘 阅读详情

相关推荐

python3微博爬虫GUI程序(图片与微博)

这是纯代码非GUI的博文:http://www.omegaxyz.com/2018/02/13/python_weibo/ GUI程序的功能: ①输入需要被爬取的微博的ID,点击运行选择保存的位置即可爬取。 ②进度可视化界面。 ③如果内置代理失效可以进行代理自定义设置。 ④可视化被爬取微博者的个人信息。

Python网络爬虫入门

Python网络爬虫入门 网络爬虫(web crawler),也叫网络蜘蛛(Web Spider)、网络机器人(Internet Bot)。简单地说,抓取万维网(World Wide Web)上所需要的数据的程序就叫网络爬虫。 网络爬虫常见分类: 通用网络爬虫(General Purpose Web Crawler)又称全网爬虫(Scalable Web Crawler)爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。这类网络爬虫的爬行范围

cnds123的专栏 3138

爬虫爬取小姐姐图片

python 3 的爬虫 爬取小姐姐图片 批量下载 完整代码 提供参考 不懂可以私信我

想用Python爬小姐姐图片?那你得先搞定分布式进程

分布式进程在Python中依然要用到multiprocessing模块。multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多...

Python大本营的博客 299

《计算机网络》复试问答题总结

DNS 是一个联机分布式数据库系统,负责主机名和 IP 地址之间的转换,需要进行域名查询的机器主动发起域名解析请求,域名服务器则随时准备做出响应。域名服务器的数据库中存放着它所管辖范围的主机名和 IP 地址之间的映射表,域名服务器之间又可以相互联络和协作,以便分布在 Internet 各个域名服务器数据库中的域名都能被有效地搜索,从而实现主机名与 IP 地址的映射。为了提高解析效率,使用了域名缓存技术。在服务器、主机中设置一个专用的内存缓冲区。服务器用来存放近期解析过的域名及其对应的 IP 地址的映射。

weixin_45971154的博客 2030

LiveKit 本地部署实战:从零搭建安全实时通信环境(Caddy+HTTPS)

本文详细介绍了如何从零开始搭建LiveKit本地部署环境,结合Caddy服务器实现HTTPS安全通信。通过环境准备、证书生成、服务配置到前端客户端集成的完整流程,帮助开发者快速构建实时音视频应用,特别适合需要安全实时通信的场景。

weixin_29227585的博客 681

Python使用BeautifulSoup爬取妹子图

最近突然发现之前写的妹子图的爬虫不能用了,估计是网站又加了新的反爬虫机制,本着追求真理的精神我只好又来爬一遍了! 效果 文件夹 妹子图 思路整理 页面地址:http://www.meizitu.com/ 获取首页分类标签地址,传入下一步 image.png 获取每个...

weixin_33755557的博客 509

Modbus RTU 详解 + FreeMODBUS移植(附项目源码)

本文全面解析Modbus RTU通信协议,详细介绍其报文格式、功能码定义及典型应用场景,并手把手指导如何将FreeMODBUS协议栈移植到嵌入式平台。内容涵盖从底层硬件驱动配置、协议栈移植到主机/从机通信测试的全流程,重点讲解移植过程中的常见问题及解决方案。文章最后提供经过实测的完整项目源码,帮助开发者快速实现稳定的Modbus RTU通信功能。

Bit_Dong的博客 2932

Python3.6爬取网站图片

最近几天在学校python,写了个简单的爬虫程序: 成功运行代码的前提是安装了python需要的第三方库,以下是代码:# -*- coding:utf8 -*- import os import re import requests as rq import urllib from bs4 import BeautifulSoup #下载图片 def getHtml2(): html

qq_31247885的博客 1453

【使用DeepSeek辅助Python接口性能自动化测试教程-实战教程】

访问DeepSeek官方网站,注册账号并获取API Key。此Key是调用DeepSeek API的必要凭证,务必妥善保管。安装时,注意勾选“Add Python to PATH”选项,以便系统能识别Python命令。确保你已安装Python 3.8或更高版本。会自动发现并执行所有以。

Dreams°的博客 2467

第一百三十九回 介绍三个BLE包

本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。

talk_8的专栏 574

python爬图片_想用Python爬小姐姐图片?那你得先搞定分布式进程

脚本之家你与百万开发者在一起导读:分布式进程指的是将Process进程分布到多台机器上,充分利用多台机器的性能完成复杂的任务。我们可以将这一点应用到分布式爬虫的开发中。作者:范传辉如需转载请联系大数据(ID:hzdashuju)分布式进程在Python中依然要用到multiprocessing模块。multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程...

weixin_39676348的博客 93

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1697

python queue windows_想用Python爬小姐姐图片?那你得先搞定分布式进程

原标题:想用Python爬小姐姐图片?那你得先搞定分布式进程导读:分布式进程指的是将Process进程分布到多台机器上,充分利用多台机器的性能完成复杂的任务。我们可以将这一点应用到分布式爬虫的开发中。作者:范传辉如需转载请联系大数据(ID:hzdashuju)分布式进程在Python中依然要用到multiprocessing模块。multiprocessing模块不但支持多进程,其中manager...

weixin_39969568的博客 110

SAP 物料的与压缩库存数据不一致

总结:发生这个问题的原因多数会发生在测试系统在拷贝正式系统的时候会发生这样的情况,系统在拷贝的时候,业务数据还在发生,就会导致数据拷贝的时候丢失数据。经过查询发现是由于物料分类账中的物料的库存数量和 ACDOCA_M_EXTRACT表中的数量对不上,导致系统抛出报错的信息。由于是测试系统,直接更改表的数据,把ACDOCA_M_EXTRACT表中的库存数据和金额与物料分类账中的数据保持一致。在测试系统中进行501和561增加库存的时候,系统提示物料的预压缩库存数据不一致的报错。

我小时候很黑的博客 3308

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 518

Python初识——Scrapy抓取二次元小姐姐图片

写在前面 最近在学习Python这门语言,禀着实践是最好的学习方法的原则,上来就迫不及待的学习了Scrapy框架,并结合网上的例子进行了实验,不得不说感觉到了Python和Scrapy的强大之处,同时也感觉算是站在Python的门外,窥得厅堂里面的东西,还是有些小激动的。那么本帖算是对往日工作的一个总结,也希望自己能够把总结这个习惯坚持下去,一方面帮助自己,一方面帮助他人。 参考链接

wuRDmemory 8661

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

零基础1个月入门Python爬虫,轻松爬取大规模数据!

如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得...

区块链大本营 1476

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2020 年 Python 知识清单(网络爬虫)

整理了一份Python开发技术学习清单,主要来自2020年1月1日前Python中文社区往期文章,本期收录的是网络爬虫相关的知识点。用Python爬取WordPress官网所有插件开源项...

Python中文社区 3026

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

秀的一批,那些你不得不知的 Python 杀手级框架!

Python 作为一门极易入门的编程语言,一是得益于其简洁的语法,而是因为有着丰富的第三方库的支持,很多复杂的功能,比如机器学习,数据分析等直接调用第三方库封装好的函数,一行代码即可搞定。...

cainiao_python的博客 219

Python全栈学习笔记

pystudy Hi, Guys, Welcome to pystudy! You will Learn the python3 language here, from entry to abandonment! I will keep updating study notes here, commit codes and add comment ! Python环境搭建 Linux系统UOS SP1上搭建Python开发环境.(IDE:PyCharm和VsCode) Python基础入门 1.语法格式 2

哎哟喂的专栏 793

免费直播!用Python开发人脸识别程序,零基础也能学(附源码)

在当今社会人脸识别技术应用的范围越来越广泛,全球很多商业活动都已经从中获益:人脸自动对焦和笑脸快门技术,人脸识别门禁,人脸识别支付等许多方面。人脸识别技术的使用在接下来的几年内还会继续增...

lsxxx2011的专栏 353

我所有的项目,源码全在这了!

全民学Python的话题铺天盖地,中国的Python学习者是全球第一,人才如此泛滥,甚至以后孩子都会,学习它还能体现自身高价值?毫不夸张的说,在未来。不会Python=文盲。所以,不论竞...

cainiao_python的博客 568

最新!7月份火爆Github的热门Python项目

开源最前线(ID:OpenSourceTop)整理7月份GitHub上最热门的Python开源项目排行已经出炉啦,一起来看看上榜详情吧:1mvthttps://github.com/mvt...

cainiao_python的博客 340
上一篇: 关于使用python开发web应用的几个库总结
下一篇: 六维图见过么?Python 画出来了 !
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值