一、普通的子线程创建
1、导入需要的库文件
from multiprocessing import Process
2、创建一个普通函数,输出5遍相同的内容
def funa(): for i in range(5): print("我是子线程")
3、在主线程调用普通函数(子线程)
if __name__=="__main__": print("我是主线程") p=Process(target=funa) p.start() print("主线程结束")
4、运行结果
我是主线程 主线程结束 我是子线程 我是子线程 我是子线程 我是子线程 我是子线程
二、子线程如何传递参数
1、创建一个带有参数的函数
def funa(n): for i in range(n): print("我是子线程")
2、主线程调用带有参数的函数,在Process函数中传递参数,一个参数后面需要加一个逗号,否则就不是元组格式
if __name__=="__main__": print("我是主线程") p=Process(target=funa,args=(5,)) p.start() print("主线程结束")
3、运行结果
我是主线程 主线程结束 我是子线程 我是子线程 我是子线程 我是子线程 我是子线程
三、同步与异步对比
1、创建一个花费时间的程序,传入几相当于让程序睡几秒
def funa(n): for i in range(n): time.sleep(1) print("我是a")
2、在程序运行时,获取一个时间戳time.time(),等运行结束再生成一个时间戳,减去开始生成的时间戳,就可以得到程序运行的时间。
if __name__=="__main__": print("我是主线程") s=time.time() a=[2,3,4] for i in a: funa(i) print("程序花费:",time.time()-s)
3、运行结果,大概花费了6秒
我是主线程 我是a 我是a 我是a 我是a 我是a 我是a 我是a 我是a 我是a 程序花费: 9.004536867141724
4、异步实现
def funa(n): for i in range(n): time.sleep(1) print("我是a") if __name__=="__main__": print("我是主线程") s=time.time() a=[2,3,4] b=[] #存储创建好的进程 for i in a: p=Process(target=funa,args=(i,)) b.append(p) p.start() for pp in b: pp.join()#pp执行完join操作,主程序才结束 print("程序花费:",time.time()-s)
5、运行结果
我是主线程 我是a 我是a 我是a 我是a 我是a 我是a 我是a 我是a 我是a 程序花费: 4.339980602264404