python多线程与多进程--存活主机ping扫描以及爬…
2019-02-21 06:39:39来源:博客园 阅读 ()
python多线程与多进程
多线程:
案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)
普通版本:
#扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)
import sys import subprocess import time def ping(net,start=100,end=200,n=2,w=5): for i in range(start,end+1): ip=net+"."+str(i) command="ping %s -n %d -w %d"%(ip,n,w) print(ip,("通","不通")[subprocess.call(command,stdout=open("nul","w"))]) #stdout=open("nul","w") #不显示命令执行返回的结果 t1=time.time() if len(sys.argv)!=2: print("参数输入错误!") print("运行示例:") print("test01.py 123.125.114") elif len(sys.argv)==2: net=sys.argv[1] ping(net) t2=time.time() print("程序耗时%f秒!"%(t2-t1)) #195.091611秒
运行效果如下:
在python里面,线程的创建有两种方式,其一使用Thread类创建
导入Python标准库中的Thread模块
from threading import Thread
创建一个线程
mthread = threading.Thread(target=function_name, args=(function_parameter1, function_parameterN))
启动刚刚创建的线程
mthread .start()
function_name: 需要线程去执行的方法名
args: 线程执行方法接收的参数,该属性是一个元组,如果只有一个参数也需要在末尾加逗号。
多线程版:
import sys import subprocess import time from threading import Thread #在python里面,线程的创建有两种方式,其一使用Thread类创建 # 导入Python标准库中的Thread模块 #from threading import Thread # # 创建一个线程 #mthread = threading.Thread(target=function_name, args=(function_parameter1, function_parameterN)) # 启动刚刚创建的线程 #mthread .start() #function_name: 需要线程去执行的方法名 #args: 线程执行方法接收的参数,该属性是一个元组,如果只有一个参数也需要在末尾加逗号。 result=[] def ping1(ip): command="ping %s -n 1 -w 20"%(ip) result.append([ip,subprocess.call(command)]) def ping(net,start=100,end=200): for i in range(start,end+1): ip=net+"."+str(i) th=Thread(target=ping1,args=(ip,)) th.start() def main(): if len(sys.argv)!=2: print("参数输入错误!") print("运行示例:") print("test01.py 123.125.114") elif len(sys.argv)==2: net=sys.argv[1] ping(net) if __name__=='__main__': t1=time.time() main() while len(result)!=101: time.sleep(1) print(result) t2=time.time() print("程序耗时%f秒!"%(t2-t1)) #1.585263秒
多线程案例2:爬取股票的价格
多线程 #爬取股票的价格 import requests import re import time from threading import Thread code=[600016,600000,601939,600036,603683,600050,601890,600795,601857,600584,601231,603165,600644,603005,601198,603690,600643,600131,600776,603609,601377] m1=re.compile(r"price: '(\d{1,3}\.\d{2}')") def getprice(id): url="http://quotes.money.163.com/0%s.html"%id txt=requests.get(url).text price=m1.search(txt).group(1) print(id,price) if __name__=="__main__": ts=[] start=time.time() for id in code: t=Thread(target=getprice,args=(id,)) ts.append(t) t.start() for t in ts: t.join() #等待子线程运行完,主线程再运行 print("程序耗时:",time.time()-start)
多进程:
爬取股票的价格(多进程版)
#多进程 #爬取股票的价格 import requests import re import time from multiprocessing import Process from threading import Thread code=[600016,600000,601939,600036,603683,600050,601890,600795,601857,600584,601231,603165,600644,603005,601198,603690,600643,600131,600776,603609,601377] m1=re.compile(r"price: '(\d{1,3}\.\d{2}')") def getprice(id): url="http://quotes.money.163.com/0%s.html"%id txt=requests.get(url).text price=m1.search(txt).group(1) print(id,price) ps=[] #进程池 if __name__=="__main__": start=time.time() for id in code: p=Process(target=getprice,args=(id,)) ps.append(p) #把进程放入列表(进程池) p.start() #启动进程 for p in ps: p.join() print(time.time()-start)
爬取股票的价格(多进程版)带Pool
#爬取股票的价格 import requests import re import time from multiprocessing import Pool #多进程带Pool code=[600016,600000,601939,600036,603683,600050,601890,600795,601857,600584,601231,603165,600644,603005,601198,603690,600643,600131,600776,603609,601377] m1=re.compile(r"price: '(\d{1,3}\.\d{2}')") def getprice(id): url="http://quotes.money.163.com/0%s.html"%id txt=requests.get(url).text price=m1.search(txt).group(1) print(id,price) if __name__=="__main__": start=time.time() p=Pool(4) for id in code: p.apply_async(getprice,args=(id,)) #async异步,第一个参数是函数名,第二个是此函数的参数 p.close() p.join() #等待子线程运行完,主线程再运行 print("程序耗时:",time.time()-start)
原文链接:https://www.cnblogs.com/yuzly/p/10409056.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Python的文件操作
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash