python 多进程多线程浅谈

    xiaoxiao2022-07-13  178

    进程是系统分配资源的最小单位 线程是可以执行的最小单位 进程包括线程 进程执行 是相当于一个完成的任务 按顺序执行程序 多线程就是可以同时 实现不同的任务 比如一边听歌一边 看电影 进程就相当于 听完歌再看电影 显然多线程更节约时间也是比较常用的

    (这篇文章后续会补充)

    import time import threading '''单线程 def music(name,loop): for i in range(loop): print('listen to music %s %s'%(name,time.ctime())) time.sleep(1) def movie(name,loop): for i in range(loop): print('look a movie %s %s'%(name,time.ctime())) time.sleep(1) if __name__ == '__main__': music('以父之名',3) movie('头文字D',4) print('end time %s '%time.ctime()) ''' '''python 中没有多线程只是一种假 模拟 如下''' ''' def music(name,loop): for i in range(loop): print('listen to music %s %s %s'%(name,time.ctime(),threading.Thread.getName(t1))) time.sleep(1) def movie(name,loop): for i in range(loop): print('look a movie %s %s %s'%(name,time.ctime(),threading.Thread.getName(t2))) time.sleep(1) t1=threading.Thread(target=music,args=('以父之名',4)) t1.setName('music') t2=threading.Thread(target=movie,args=('头文字D',3),name='movie') if __name__ == '__main__': #守护主线程 主线程结束杀死子线程 t1.setDaemon(True) t2.setDaemon(True) #启动线程 start() t1.start() t2.start() print('end time %s '%time.ctime()) #join堵塞主线程,先执行子线程 #t1.join() #t2.join() print('main thread %s '%time.ctime()) #GIL全局排它锁 但可能导致无法很好地利用多核CPU的并发处理能力 其实就相当于了单核单线程 ''' #加锁 balance = 0 def change(n): global balance balance+=n balance-=n lock = threading.Lock() def run_thread(n): for i in range(1000000): #获取到锁 lock.acquire() try: change(n) finally: lock.release()#释放锁 t1=threading.Thread(target=run_thread,args=(4,)) t2=threading.Thread(target=run_thread,args=(8,)) t1.start() t2.start() t1.join() t2.join() print(balance)

     

    最新回复(0)