当前位置:  建站>运营/SEO
本页文章导读:
    ▪python线程池(threadpool)模块使用      最近碰到个问题,需要telnet登录上千台机器去取主机名;其中有用户名密码交互部分,有需要延迟的部分,大概一次登录一次到处理完要10s,1000台机器串行处理就需要1000×10s,差不多三个小.........
    ▪centos 格式化新硬盘并设置开机自动挂载      服务器上加了一块新硬盘,在/dev/下只能看到一个sdb的设备。 于是要分区、创建文件系统、设置开机自动挂载,过程如下: 1、创建分区 用parted命令分区: # parted /dev/sdb (parted) mktable gpt (parted.........
    ▪CentOS 格式化新硬盘并设置开机自动挂载      服务器上加了一块新硬盘,在/dev/下只能看到一个sdb的设备。 于是要分区、创建文件系统、设置开机自动挂载,过程如下: 【引用请注明出处http://blog.csdn.net/bhq2010/article/details/9238997】 1、创.........

[1]python线程池(threadpool)模块使用
    来源: 互联网  发布时间: 2013-10-31

最近碰到个问题,需要telnet登录上千台机器去取主机名;其中有用户名密码交互部分,有需要延迟的部分,大概一次登录一次到处理完要10s,1000台机器串行处理就需要1000×10s,差不多三个小时,这是很难受的事情;

之前用thread的start_new_thread方法也可以实现,但是线程数量不好控制,没找到相关的控制线程数量的锁;


找了下关于python的线程池,找到threadpool这么一个模块,可以满足我的需求,见:

http://chrisarndt.de/projects/threadpool/

我下的是版本1.2.2:

http://chrisarndt.de/projects/threadpool/download/threadpool-1.2.2.tar.bz2


放到当前目录或者python模块库都行,用法很简单,见:

Basic usage::

    >>> pool = ThreadPool(poolsize)
    >>> requests = makeRequests(some_callable, list_of_args, callback)
    >>> [pool.putRequest(req) for req in requests]
    >>> pool.wait()



第一行定义了一个线程池,表示最多可以创建poolsize这么多线程;

第二行是调用makeRequests创建了要开启多线程的函数,以及函数相关参数和回调函数,其中回调函数可以不写,default是无,也就是说makeRequests只需要2个参数就可以运行;

第三行用法比较奇怪,是将所有要运行多线程的请求扔进线程池,[pool.putRequest(req) for req in requests]等同于:

for req in requests:
    pool.putRequest(req)

第四行是等待所有的线程完成工作后退出;



下面看下我的代码,使用线程池前后代码对比,不使用线程池:

import telnetlib
import time

#执行比较耗时的函数,需要开启多线程
def myTelnet(L):
	tn = telnetlib.Telnet(L[0])
	time.sleep(2)
	...
	idx = tn.expect(["Username:", "login:"], timeout=5)
	...
	time.sleep(3)
	x = tn.read_very_eager()
	tn.close()
	...
	return

#模拟255个ip,需要逐个登录的函数
def myIpPool(ipPrefix):
	List=[]
	for i in range(1, 255):
		List.append("%s.%d" % (ipPrefix, i))
	return List

#串行运行telnet登录
L=myIpPool("200.200.200")
for i in range(len(L)):
	myTelnet(L[i])

如果myTelnet每次执行要10s,那么255次myTelnet就需要2550s,大概是40分钟;


用多线程的情况:

import telnetlib
import time
import threadpool

#执行比较耗时的函数,需要开启多线程
def myTelnet(L):
	tn = telnetlib.Telnet(L[0])
	time.sleep(2)
	...
	idx = tn.expect(["Username:", "login:"], timeout=5)
	...
	time.sleep(3)
	x = tn.read_very_eager()
	tn.close()
	...
	return

#模拟255个ip,需要逐个登录的函数
def myIpPool(ipPrefix):
	List=[]
	for i in range(1, 255):
		List.append("%s.%d" % (ipPrefix, i))
	return List

	
#使用多线程执行telnet函数
pool = threadpool.ThreadPool(10)
requests = threadpool.makeRequests(myTelnet, L)
[pool.putRequest(req) for req in requests]
pool.wait()
output.close()

开始是个线程,理论上应该快10倍,实际可能没这么快,我将myTelnet函数改成只的sleep 10秒,什么也不干,测了下执行完需要260s,几乎是10倍的速度;改成如下:

pool = threadpool.ThreadPool(30)
90s执行完毕,说明线程池还是很有用的东西。



作者:onwer3 发表于2013-7-4 1:18:56 原文链接
阅读:5 评论:0 查看评论

    
[2]centos 格式化新硬盘并设置开机自动挂载
    来源: 互联网  发布时间: 2013-10-31

服务器上加了一块新硬盘,在/dev/下只能看到一个sdb的设备。

于是要分区、创建文件系统、设置开机自动挂载,过程如下:

1、创建分区

用parted命令分区:

# parted /dev/sdb
(parted) mktable gpt
(parted) mkpart data 1024KiB -1
(parted print)
parted之后的参数是设备名。mkpart命令的三个参数分别是分区名(随便起),开始地址,结束地址-1表示至结尾,前面留出的空间可能是用于存放分区信息,不留的时候会有警告。print查看分区结果

2、格式化分区

创建分区之后,出现了/dev/sdb1分区。使用mkfs命令格式化分区:

# mkfs /dev/sdb1 ext4

3、设置开机挂载

修改/etc/fstab文件,在末尾加上一行:

/dev/sdb1               /data                   ext4    defaults        0 0

各字段分别是分区,挂载点,文件格式,挂载参数。后两个一般用0 0

重启,看看是否设置成功。

作者:bhq2010 发表于2013-7-4 3:13:11 原文链接
阅读:4 评论:0 查看评论

    
[3]CentOS 格式化新硬盘并设置开机自动挂载
    来源: 互联网  发布时间: 2013-10-31

服务器上加了一块新硬盘,在/dev/下只能看到一个sdb的设备。

于是要分区、创建文件系统、设置开机自动挂载,过程如下:

【引用请注明出处http://blog.csdn.net/bhq2010/article/details/9238997】

1、创建分区

用parted命令分区:

# parted /dev/sdb
(parted) mktable gpt
(parted) mkpart data 1024KiB -1
(parted print)
parted之后的参数是设备名。mkpart命令的三个参数分别是分区名(随便起),开始地址,结束地址(-1表示块设备末尾),前面留出的空间可能是用于存放分区信息,不留的时候会有警告。print查看分区结果

2、格式化分区

创建分区之后,出现了/dev/sdb1分区。使用mkfs命令格式化分区:

# mkfs /dev/sdb1 ext4

3、设置开机挂载

修改/etc/fstab文件,在末尾加上一行:

/dev/sdb1               /data                   ext4    defaults        0 0

各字段分别是分区,挂载点,文件格式,挂载参数。后两个一般用0 0

【引用请注明出处http://blog.csdn.net/bhq2010/article/details/9238997】

重启,看看是否设置成功。

作者:bhq2010 发表于2013-7-4 3:13:11 原文链接
阅读:268 评论:0 查看评论

    
最新技术文章:
▪SQVI和SAP查询QUERY的区别和使用注意事项    ▪彻底理解Cisco/Linux/Windows的IP路由    ▪Exchange 2010 处于禁止发送用户自动收到来自IT...
▪MB_CHANGE_DOCUMENT使用方法    ▪ALV的html表头    ▪【译】如何精确判断最终用户响应时间过长的...
▪apache2.4.4启用deflate压缩    ▪使用vmware 配置centos 6.0+ 网络出现的各种问题...    ▪十句话教你学会Linux数据流重定向
▪centos6.x已经安装的系统添加图形界面    ▪Linux查看CPU和内存使用情况    ▪win7问题解决,凭据管理器和无法访问,不允...
▪Dynamics CRM 2013 初体验(4):不再被支持的功...    ▪win7下制作ubuntu系统安装启动盘和U盘安装ubuntu...    ▪Linux cp -a用法
▪Windows Server时间服务器配置方法    ▪Tomcat+memcached实现Session共享    ▪Linux修改系统环境变量PATH路径的方法
▪Citrix 服务器虚拟化之二十七 XenApp6.5发布服务...    ▪搭建本地Ubuntu 镜像服务器    ▪Create local metadata resource of yum
▪tsm ANS0326E问题处理    ▪Windows SVN变化邮件通知(Python2.7实现)    ▪linux下的内核测试工具——perf使用简介
▪Nginx TCP Proxy模块的编译安装    ▪OSX: SSH密钥使用日记(2)    ▪OSX: SSH密钥使用日记(1)
▪Manually start and stop Oracle XE in Ubuntu    ▪Disable autostart of Oracle-xe in Ubuntu    ▪tar命令-linux
▪xtrabackup-2.1.2-611安装    ▪无废话ubuntu 13.4文件共享配置    ▪Unix文本处理工具之sed
▪hpux 操作系统 磁带备份与恢复    ▪HP DL360 G7通过iLO部署系统    ▪Redhat 6.0中VNC Server的配置方法
▪hpux 操作系统磁带备份与恢复    ▪用C++编程调用libvirt的API来创建KVM虚拟机    ▪hpux- hp小型机日常硬件故障处理case(一)
▪web集群时session同步的几种方法(统计)    ▪inux常用命令大全    ▪BAT 批处理实现循环备份N天文件夹
▪BIND9私有DNS服务器小环境搭建实验    ▪Exchange2013增量备份    ▪OSSEC Monitor your App log file
▪《深入理解Nginx》阅读与实践(三):使用upstre...    ▪如何给Fedora 15创建磁盘分区    ▪Packet Sniffer Code in C using sockets
▪Error, some other host already uses address    ▪修改uCOS_II以实现“优先级+时间片”联合调度    ▪weblogic开发模式与生产模式介绍
▪Wireshark 高级特性    ▪ubuntu13.04版本下安装RabbitVCS,类似windows的Tortoi...    ▪Apache 一台主机绑定多个域名及虚拟主机
▪linux安全设置    ▪RHEL双网卡绑定    ▪Linux shell if参数
▪Windows配置路由时可以指定源地址啦    ▪centos安装vim7.4    ▪S3C2410 实验三——块拷贝、字拷贝(寄存器的...
▪系统运维——日志处理    ▪ip_conntrack缓存neighbour    ▪关键在封装并发出了帧-IP冲突也无所谓
▪weblogic11g 安装——linux 无图形界面    ▪《数据通信与网络》笔记--SCTP    ▪《数据通信与网络》笔记--TCP中的拥塞控制
▪weblogic11g 安装集群 —— win2003 系统、单台主...    ▪weblogic11g 节点管理器 nodemanager    ▪Citrix 服务器虚拟化之二十六 应用程序虚拟化...
▪如何将windows下的文件夹挂载到linux虚拟机下    ▪在64位AIX6.1下安装SAP JCo    ▪Outlook启动时提示“找不到文件Outlook.pst文件”...
▪weblogic8.1 登陆5 ip 限制    ▪weblogic 内存 及 内存溢出    ▪手把手教你在Windows端搭建Redmine项目管理软件
▪启动及重新启动nginx,重启nginx后丢失nginx.pid问...    ▪Win7实现快速启动栏并实现靠左边的终极操作...    ▪《深入理解Nginx》阅读与实践(二):配置项...
▪显示grub引导菜单    ▪nagios监控主机    ▪linux各种数据流重定向
▪centOS安装chrome浏览器    ▪Slackware 14 安装完全指南    ▪SharePoint 2013的100个新功能之内容管理(三)
▪Citrix 服务器虚拟化之二十一 桌面虚拟化之部...    ▪[问,ask]ubuntu13.04安装vncserver后只显示桌面,不显...    ▪Win7中IIS出现“HTTP 错误 404.17 - Not Found 请求的...
▪CentOS快速安装最新版本的SaltStack    ▪CentOS 6.4 快速安装Nginx笔记    ▪磁盘管理——RAID 0
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3