当前位置: 首页 > 后端技术 > Python

Python学习系列——进程与线程(9)

时间:2023-03-26 17:18:19 Python

我们的电脑总是可以打开很多程序,同一个程序会同时实现多个功能。这就是多处理多线程!多进程multiprocessingUnix/Linux操作系统提供了fork()系统调用,但在Windows上无法调用。Python既然是跨平台的,自然应该提供跨平台的多进程支持。多处理模块是多处理模块的跨平台版本。frommultiprocessingimportProcessimportos#子进程要执行的代码defrun_proc(name):print('Runchildprocess%s(%s)...'%(name,os.getpid()))if__name__=='__main__':print('父进程%s.'%os.getpid())p=Process(target=run_proc,args=('test',))print('子进程将启动。')p.大量的子进程,可以以进程池的形式批量创建子进程:frommultiprocessingimportPoolimportos,time,randomdeflong_time_task(name):print('Runtask%s(%s)...'%(name,os.getpid()))start=time.time()time.sleep(random.random()*3)end=time.time()print('任务%s运行%0.2f秒。'%(name,(end-start)))if__name__=='__main__':print('父进程%s.'%os.getpid())p=Pool(4)foriinrange(5):p.apply_async(long_time_task,args=(i,))print('等待所有子进程完成...')p.close()p.join()print('Allsubprocessesdone.')运行结果:Parentprocess16320.Waitingforallsubprocessesdone...Runtask0(3480)...Runtask1(7388)...运行任务2(14396)...运行任务3(14288)...任务2运行0.43秒。运行任务4(14396)...任务0运行0.44秒。任务4运行0.49秒。任务1运行1.58秒。任务3运行2.92秒。所有子流程完成。多线程启动一个线程就是传入一个函数,创建一个Thread实例,然后调用start()开始执行:#新线程执行的代码:defloop():print('thread%sis正在运行...'%threading.current_thread().name)n=0whilen<5:n=n+1print('thread%s>>>%s'%(threading.current_thread().name,n))time.sleep(1)print('thread%sended.'%threading.current_thread().name)print('thread%sisrunning...'%threading.current_thread().name)t=threading.Thread(target=loop,name='LoopThread')t.start()t.join()print('thread%sended.'%threading.current_thread().name)运行结果:threadMainThreadisrunning..。线dLoopThread正在运行...threadLoopThread>>>1threadLoopThread>>>2threadLoopThread>>>3threadLoopThread>>>4threadLoopThread>>>5threadLoopThreadended.threadMainThread结束。