博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux多线程网页截图-python
阅读量:6992 次
发布时间:2019-06-27

本文共 1620 字,大约阅读时间需要 5 分钟。

  hot3.png

上一篇中(
),使用shell多进程对大量的网站截图,大大减少了截图的时间。但慢慢的也发现了这种方式的弊端:每个进程分配的网站数量是相等的,有些进程截图较快,有些较慢,个别进程在其它进程已经截图完成后,还要运行10多个小时才能把分配的网站截图完。
如何把现有的“平均分配”截图方式改成“能者多劳”呢?

刚好最近在学习python,而python可以很方便的支持多线程。找了些资料,使用threading+queue的方式实现了“能者多劳”的多线程截图方式:

#coding:utf-8import threading,urllib2import datetime,timeimport Queueimport os class Webshot(threading.Thread):        def __init__(self,queue):                threading.Thread.__init__(self)                self.queue=queue         def run(self):                while True:                       #如果队列为空,则退出,否则从队列中取出一条网址数据,并截图                        if self.queue.empty():                                break                        host=self.queue.get().strip('\n')                        shotcmd="DISPLAY=:0 cutycapt --url=http://"+host+" --max-wait=90000 --out="+host+".jpg"                        os.system(shotcmd)                        self.queue.task_done()                        time.sleep(1) def main():        queue=Queue.Queue()        f=file('domain.txt','r')      #往队列中填充数据        while True:                line=f.readline()                if len(line)==0:                        break                queue.put(line)       #生成一个 threads pool, 并把队列传递给thread函数进行处理,这里开启10个线程并发        for i in range(0,10):                shot=Webshot(queue)                shot.start() if __name__=="__main__":        main()

程序描述如下:

1、创建一个Queue.Queue() 的实例,将domain.txt里的网站列表存入到该队列中
2、for循环生成10个线程并发
3、将队列实例传递给线程类Webshot,后者是通过继承 threading.Thread 的方式创建的
4、每次从队列中取出一个项目,并使用该线程中的数据和 run 方法以执行相应的工作
5、在完成这项工作之后,使用 queue.task_done() 函数向任务已经完成的队列发送一个信号

参考:

转载于:https://my.oschina.net/cszhi/blog/137650

你可能感兴趣的文章
Manifest.xml 入门基础 (二) <uses-permission> 标签
查看>>
下个2的幂-一个简单而优雅的算法优化介绍
查看>>
介绍几个好用的android自定义控件
查看>>
2017元旦,你被闰秒吓到了吗? - 闰秒背景与数据库处理
查看>>
《C语言及程序设计》实践参考——个人所得税计算器if语句版
查看>>
jeesite 框架搭建与配置
查看>>
大一学生数据结构与算法的先后取舍
查看>>
Linux高可用性方案之Heartbeat的Stonith配置(原创)
查看>>
spark 1.X standalone和on yarn安装配置
查看>>
日志服务(原SLS)新功能发布(12)--日志投递ODPS支持自动建表授权
查看>>
OpenSSH高级功能之端口转发(Port Forwarding)
查看>>
[超牛]只能输入数字的文本框,兼容IE7IE8等
查看>>
13个帮你提高开发效率的现代CSS框架
查看>>
【c】自己实现strcmp函数
查看>>
制作私有cocoapods
查看>>
TmoLand一款真正意义上的RPG区块链游戏
查看>>
前端面试(二)css
查看>>
看完《互联网公司时尚穿搭指南》,百度程序员笑出了猪声!太逗了!
查看>>
java导入excle表格,并且对表格进行相应的修改,并对表格数据进行整理,最后导出本地表格等一系列操作...
查看>>
PHP的session的实现机制
查看>>