上一篇中(

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相关推荐

  1. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解

    linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...

  2. linux终端长截图,如何在终端下截取一个完整长度的网页截图

    与其记笔记或是把看到的内容发送给其他人,我们更经常通过截屏来帮助我们记忆. 但是通常情况下,如果一个网页超出了屏幕高度,我们就得用多张截图去截取其全部内容. 对于 Linux,你将会有一个更好的解决方 ...

  3. 如何在终端下截取一个完整长度的网页截图

    与其记笔记或是把看到的内容发送给其他人,我们更经常通过截屏来帮助我们记忆. 但是通常情况下,如果一个网页超出了屏幕高度,我们就得用多张截图去截取其全部内容. 对于 Linux,你将会有一个更好的解决方 ...

  4. 用 python 实现一个多线程网页下载器

    今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...

  5. linux用c进程并行,Linux下的C / C ++使用多线程

    使用多线程的原因之一是,与进程相比,它是一种非常"节俭"的多任务操作模式. 我们知道,在Linux系统下,要启动一个新进程,必须将其分配给其独立的地址空间,建立大量数据表以维护其代 ...

  6. linux下打开配置文件命令_Linux下用户权限相关命令

    09.Linux下用户权限相关命令 用户权限的基本概念: 用户 是Linux 系统工作中重要的一环,用户管理包括 用户 与 组 管理 在Linux系统中,不论是由本机或是远程登陆系统,每个系统都必须拥 ...

  7. linux下mkdir头文件_Linux部分常用命令学习记录

    Linux部分常用命令 ls 显示目标列表 ls -a 显示所有档案及目录(ls内定将档案名或目录名称为"."的视为影藏,不会列出): ls -l 以长格式显示目录下的内容列表.输 ...

  8. linux下mysql服务架设_linux下源码搭建php环境之mysql(一)

    现在已经大半夜了,五一劳动节挺无聊的. 折腾一下吧,实在是睡不着.于是乎在电脑上安装个虚拟机,然后呢,在虚拟机上搭建一个php环境. 首先我得安装MYSQL吧.发现遇到的问题真多..待我娓娓道来. 主 ...

  9. linux下mysql的备份_Linux下MySQL的备份与还原

    Linux下MySQL的备份与还原 2.1 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [ro ...

最新文章

  1. SpirngMVC jsp页面空指针
  2. iOS设计模式——中介者模式
  3. Windows 软RAID 1操作教程
  4. ejabberd java,java-xmpprpc结合ejabberd开发
  5. extjs tree 遍历树节点并设置选中
  6. java 布隆过滤器_什么是布隆过滤器(Bloom Filter)?
  7. HTTP状态:202、301、304、404、503
  8. revit二次开发概念_BIM百科 | Revit二次开发入门--创建一个简单的程序
  9. win10不能访问服务器共享文件夹权限,win10系统共享文件夹无法访问的解决方法...
  10. vs 执行单个文件,如cpp
  11. 如果你是中国普通式的IT人——总有些无关风月的执着
  12. 计算机专业论文推荐,计算机专业论文参考文献推荐
  13. Pytorch基础知识(7)单目标检测
  14. 区块链医疗平台搭建 高效的医疗管理生态服务体系
  15. dpdk:vfio-pci模式下iommu(N+Y)-Huge配置-numa配置
  16. 知乎账号登录+验证码
  17. windows_server_2008_远程桌面(授权、普通用户登录多用户登录
  18. matlab 矩阵的n次,用matlab的for循环产生N个矩阵,怎么取第N次的矩阵?
  19. Android开发集成高德定位SDK实现定位功能。
  20. 上班族必懂的电脑技能 误删资料 恢复不小心删错了,还把回收站清空了,咋办啊?

热门文章

  1. android studio 横向拖动条,Android HorizontalScrollView内子控件横向拖拽实例代码
  2. CUDA页锁定内存(Pinned Memory)
  3. Android中MVP模式
  4. python里面fabs什么意思_介绍Python中的fabs()方法的使用
  5. 网易企业邮箱服务器没有响应,网易邮箱企业邮箱无法收发信是怎么回事
  6. docker安装和入门教程
  7. php 站内信 类
  8. leetCode 357. Count Numbers with Unique Digits | Dynamic Programming | Medium
  9. 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
  10. Strong Convexity