python开发Day10(多进程多线程补充)
关于进程:
-
-
介绍:
- 在python中如果想要操作进程需要使用模块multprocessing
-
使用:
- Process #进程
- 介绍:
- 操作进程使用multprocessing下的Process模块,注:进程之间的内存是不共享的!(可以共享需要一个特殊的特殊的数据结构Array(数组))
- 使用:
- p = Process(target=函数,args=(参数,)) #创建线程
- p.daemon(True) #当参数为Ture的时候为主进程执行完毕后退出程序,为False的时候为等待子进程执行完毕后退出,默认为False
- p.join() #和线程的同样,很少使用!
- 使用Array来让多个进程修改一个数据
from multiprocessing import Process,Array def f(a,b): b[a] = 100 + a if __name__ == '__main__': temp = Array('i',[11,22,33,44]) for i in range(2):#循环两次执行f函数修改列表的值 p = Process(target=f,args=(i,temp,)) p.start() p.join() for i in temp: print(i) 执行结果: 100 101 33 44
- 利用manager实现多进程之间共享数据
from multiprocessing import Process,Manager def f1(a,b): b[a] = 100 + a print(b) if __name__ == '__main__': manage = Manager() dic = manage.dict() for i in range(5): p = Process(target=f1,args=(i,dic,)) p.start() p.join() 执行结果: {0: 100} {0: 100, 1: 101} {0: 100, 1: 101, 2: 102} {0: 100, 1: 101, 2: 102, 3: 103} {0: 100, 1: 101, 2: 102, 3: 103, 4: 104}
- 介绍:
- Pool #进程池的操作
- 介绍:
- 犹如一个书店,一本同样的书有3本,3个人取走后之后来的人想要获取到必须等待前3个人还书后才可获得。
- 使用:
-
poll.apply(函数,参数) #在进程池中申请一个进程去执行函数(申请一个进程执行一个再申请)
-
poll.apply_async(func=函数名,args=(参数,),callback=函数名2) #申请一个进程执行函数完成后执行函数名2,函数名2的参数是函数名执行完成后的返回值(直接全申请了,一起执行)
- 代码:
from multiprocessing import Pool import time def f1(i): time.sleep(2) return i+100 def end_call(arg): print('end>>>',arg) if __name__ == '__main__': p = Pool(5) #创建一个线程池一共有5个线程 for i in range(11): p.apply_async(func=f1,args=(i,),callback=end_call) print('123123') p.close() p.join() 执行结果: 123123 end>>> 100 end>>> 101 end>>> 102 end>>> 103 end>>> 104 end>>> 105 end>>> 106 end>>> 107 end>>> 108 end>>> 109 end>>> 110
-
- 介绍:
- Process #进程
-