在网上搜索了Python多线程和多进程的应用场景
多线程:适合io操作密集型的任务(主要为读写文件,网络并发);
多进程:适合cpu密集操作型的任务,主要使用cpu来计算,如大量的数学计算。
使用实例验证python 程序执行 I/O任务时,多线程与多进程的性能差异
实例任务:建立200个文本文件并写入文字”测试“1000遍。普通函数建立#1-200号文件,多进程建立#201-400号文件,多线程建立#401-600号文件。
import os
import time
import threading
from multiprocessing import Pool
class mythread(threading.Thread): #构造类,继承Thread类
def __init__(self,i):
threading.Thread.__init__(self)
self.i=i
def run(self): #重写run()方法,实现建立文件写入内容的功能
dir=os.getcwd()
filedir="\\".join([dir,"testfile"])
if not os.path.exists(filedir):
os.makedirs(filedir)
filename="\\".join([filedir,str(self.i)+".txt"])
with open(filename,"w+") as fp:
s="测试"*1000
fp.write(s)
def create_file(i):
dir=os.getcwd()
filedir="\\".join([dir,"testfile"])
if not os.path.exists(filedir):
os.makedirs(filedir)
filename="\\".join([filedir,str(i)+".txt"])
with open(filename,"w+") as fp:
s="测试"*1000
fp.write(s)
if __name__ == "__main__":
start=time.time()
for i in range(1,201): #没有使用线程建立前200个文件
create_file(i)
end=time.time()
print("不用线程时间:",end-start)
start1=time.time()
with Pool(5) as p:
p.map(create_file,range(201,401))
end1=time.time()
print("使用多进程时间",end1-start1)
start2=time.time()
t1=[]
for i in range(401,601): #使用线程建立后200个文件
t=mythread(i)
t1.append(t)
for i in t1:
i.start()
end2=time.time()
print("使用多线程时间:",end2-start2)