python多线程与多进程--存活主机ping扫描以及爬取股票价格

python多线程与多进程--存活主机ping扫描以及爬取股票价格,第1张

概述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扫描以及爬取股票价格所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存