linux下使用python截图_linux多线程网页截图-python
上一篇中(
linux多线程网页截图-shell
),使用shell多进程对大量的网站截图,大大减少了截图的时间。但慢慢的也发现了这种方式的弊端:每个进程分配的网站数量是相等的,有些进程截图较快,有些较慢,个别进程在其它进程已经截图完成后,还要运行10多个小时才能把分配的网站截图完。
如何把现有的“平均分配”截图方式改成“能者多劳”呢?
刚好最近在学习python,而python可以很方便的支持多线程。找了些资料,使用threading+queue的方式实现了“能者多劳”的多线程截图方式:
#coding:utf-8
import threading,urllib2
import datetime,time
import Queue
import 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() 函数向任务已经完成的队列发送一个信号
linux下使用python截图_linux多线程网页截图-python相关推荐
- linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解
linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...
- linux终端长截图,如何在终端下截取一个完整长度的网页截图
与其记笔记或是把看到的内容发送给其他人,我们更经常通过截屏来帮助我们记忆. 但是通常情况下,如果一个网页超出了屏幕高度,我们就得用多张截图去截取其全部内容. 对于 Linux,你将会有一个更好的解决方 ...
- 如何在终端下截取一个完整长度的网页截图
与其记笔记或是把看到的内容发送给其他人,我们更经常通过截屏来帮助我们记忆. 但是通常情况下,如果一个网页超出了屏幕高度,我们就得用多张截图去截取其全部内容. 对于 Linux,你将会有一个更好的解决方 ...
- 用 python 实现一个多线程网页下载器
今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...
- linux用c进程并行,Linux下的C / C ++使用多线程
使用多线程的原因之一是,与进程相比,它是一种非常"节俭"的多任务操作模式. 我们知道,在Linux系统下,要启动一个新进程,必须将其分配给其独立的地址空间,建立大量数据表以维护其代 ...
- linux下打开配置文件命令_Linux下用户权限相关命令
09.Linux下用户权限相关命令 用户权限的基本概念: 用户 是Linux 系统工作中重要的一环,用户管理包括 用户 与 组 管理 在Linux系统中,不论是由本机或是远程登陆系统,每个系统都必须拥 ...
- linux下mkdir头文件_Linux部分常用命令学习记录
Linux部分常用命令 ls 显示目标列表 ls -a 显示所有档案及目录(ls内定将档案名或目录名称为"."的视为影藏,不会列出): ls -l 以长格式显示目录下的内容列表.输 ...
- linux下mysql服务架设_linux下源码搭建php环境之mysql(一)
现在已经大半夜了,五一劳动节挺无聊的. 折腾一下吧,实在是睡不着.于是乎在电脑上安装个虚拟机,然后呢,在虚拟机上搭建一个php环境. 首先我得安装MYSQL吧.发现遇到的问题真多..待我娓娓道来. 主 ...
- linux下mysql的备份_Linux下MySQL的备份与还原
Linux下MySQL的备份与还原 2.1 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [ro ...
最新文章
- SpirngMVC jsp页面空指针
- iOS设计模式——中介者模式
- Windows 软RAID 1操作教程
- ejabberd java,java-xmpprpc结合ejabberd开发
- extjs tree 遍历树节点并设置选中
- java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?
- HTTP状态:202、301、304、404、503
- revit二次开发概念_BIM百科 | Revit二次开发入门--创建一个简单的程序
- win10不能访问服务器共享文件夹权限,win10系统共享文件夹无法访问的解决方法...
- vs 执行单个文件,如cpp
- 如果你是中国普通式的IT人——总有些无关风月的执着
- 计算机专业论文推荐,计算机专业论文参考文献推荐
- Pytorch基础知识(7)单目标检测
- 区块链医疗平台搭建 高效的医疗管理生态服务体系
- dpdk:vfio-pci模式下iommu(N+Y)-Huge配置-numa配置
- 知乎账号登录+验证码
- windows_server_2008_远程桌面(授权、普通用户登录多用户登录
- matlab 矩阵的n次,用matlab的for循环产生N个矩阵,怎么取第N次的矩阵?
- Android开发集成高德定位SDK实现定位功能。
- 上班族必懂的电脑技能 误删资料 恢复不小心删错了,还把回收站清空了,咋办啊?
热门文章
- android studio 横向拖动条,Android HorizontalScrollView内子控件横向拖拽实例代码
- CUDA页锁定内存(Pinned Memory)
- Android中MVP模式
- python里面fabs什么意思_介绍Python中的fabs()方法的使用
- 网易企业邮箱服务器没有响应,网易邮箱企业邮箱无法收发信是怎么回事
- docker安装和入门教程
- php 站内信 类
- leetCode 357. Count Numbers with Unique Digits | Dynamic Programming | Medium
- 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
- Strong Convexity