概述python多线程与多进程多线程:案例:
扫描给定网络中
存活的主机(通过ping来测试,有响应则说明主机存活)普通版本: #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)import sysimport subprocessimport timedef 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 sysimport subprocessimport timefrom 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 requestsimport reimport timefrom threading import Threadcode=[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"%idtxt=requests.get(url).textprice=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 requestsimport reimport timefrom multiprocessing import Processfrom threading import Threadcode=[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"%idtxt=requests.get(url).textprice=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 requestsimport reimport timefrom multiprocessing import Pool#多进程带Poolcode=[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"%idtxt=requests.get(url).textprice=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)
<div >
Ping(net,start=100,end=200,n=2,w=5 i range(start,end+1=net++=%(ip,(,)[subprocess.call(command,stdout=open(,))]) t1= len(sys.argv)!=2((( len(sys.argv)==2=sys.argv[1=(%(t2-t1))
运行效果如下:
在python里面,线程的创建有两种方式,其一使用Thread类创建导入Python标准库中的Thread模块 from threading import Thread 创建一个线程 mthread = threading.Thread(target=function_name,args=(function_parameter1,function_parameterN)) 启动刚刚创建的线程 mthread .start()function_name: 需要线程去执行的方法名args: 线程执行方法接收的参数,该属性是一个元组,如果只有一个参数也需要在末尾加逗号。
多线程版:
threading ==% Ping(net,end=200 i range(start,end+1=net++=Thread(target=Ping1,args=<span >def<span > main():
<span >if len(sys.argv)!=2<span >:
<span >print(<span >"<span >参数输入错误!<span >"<span >)
<span >print(<span >"<span >运行示例:<span >"<span >)
<span >print(<span >"<span >test01.py 123.125.114<span >"<span >)
<span >elif len(sys.argv)==2<span >:
net=sys.argv[1<span >]
Ping(net)
<span >if <span >name==<span >'<span >main<span >'<span >:
t1=<span >time.time()
main()
<span >while len(result)!=101<span >:
time.sleep(1<span >)
<span >print<span >(result)
t2=<span >time.time()
<span >print(<span >"<span >程序耗时%f秒!<span >"%(t2-t1)) <span >#<span >1.585263秒多线程案例2:爬取股票的价格
threading code=[600016,600000,601939,600036,603683,600050,601890,600795,601857,600584,601231,603165,600644,603005,601198,603690,600643,600131,600776,603609,601377<span >]
m1=re.compile(r<span >"<span >price: '(\d{1,3}.\d{2}')<span >"<span >)
<span >def<span > getprice(ID):
url=<span >"<span >http://quotes.money.163.com/0%s.HTML<span >"%<span >ID
txt=<span >requests.get(url).text
price=m1.search(txt).group(1<span >)
<span >print<span >(ID,price)
<span >if <span >name==<span >"<span >main<span >"<span >:
ts=<span >[]
start=<span >time.time()
<span >for ID <span >in<span > code:
t=Thread(target=getprice,args=<span >(ID,))
ts.append(t)
t.start()
<span >for t <span >in<span > ts:
t.join() <span >#<span >等待子线程运行完,主线程再运行
<span >print(<span >"<span >程序耗时:<span >",time.time()-start)
爬取股票的价格(
multiprocessing threading =[600016,3}\.\d{2}')=%==m1.search(txt).group(1=[] === ID =Process(target=getprice,)) ps.append(p) p.start() p (time.time()-start) 爬取股票的价格(多进程版)带Pool
multiprocessing =[600016,3}\.\d{2}')=%==m1.search(txt).group(1<span >if <span >name==<span >"<span >main<span >"<span >:
start=<span >time.time()
p=Pool(4<span >)
<span >for ID <span >in<span > code:
p.apply_async(getprice,args=(ID,)) <span >#<span >async异步,第一个参数是函数名,第二个是此函数的参数
<span > p.close()
p.join() <span >#<span >等待子线程运行完,主线程再运行
<span >print(<span >"<span >程序耗时:<span >",time.time()-start) 总结 以上是内存溢出为你收集整理的python多线程与多进程--存活主机ping扫描以及爬取股票价格全部内容,希望文章能够帮你解决python多线程与多进程--存活主机ping扫描以及爬取股票价格所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)