基于python的多进程和多线程编程过程
多进程创建过程(用到process库)
1.定义用到的函数
2.创建进程:
进程名 = Process(target=函数名,agrs=(传给函数的参数),name=子进程名称,kwags=调用对象字典)
3.可选参数:
进程名.daemon = True/False
False则主进程会等到子进程结束再退出
True则主进程不会理会子进程是否结束,直接退出
4.起动进程
进程名.start()
5.关闭进程
进程名.close() #关闭进程池不再接收新任务(完成后结束)
进程名.terminate #结束工作处理,不再处理任务
6.阻塞
进程名.join #主进程阻塞等待子进程的退出
进程池pool
1.定义进程池
名称 = pool(最大进程数n)
2.加入进程去进程池
名称.apply_async(目标函数,目标参数)
3.关闭进程池
名称.close()
4.等待所有子程序完成
名称.join()
多线程创建过程
方法一(继承类):
1.定义类及其函数
class 名称(threading,Thread)
2.名称 = 类名称(参数)
3.名称.start()
4.名称.join()
方法一(直接调用thread):
1.定义函数
2.定义线程
线程名 = threading.Thread(target=函数名,name='线程名', agrs=(参数))
3.名称.start()
4.名称.join()
多线程加锁:
原因:多进程各参数再各进程单独备份互不影响,但多线程会相互影响
用法:
名称 = threading.Lock() #实例化
名称.acquire()#上锁
名称.release()#要解锁否则死锁
多进程间通信
使用Queue队列通信交换数据(单向通信):
1.父进程创建Queue
名称 = Queus()
2.创建进程
3.进程相对应函数加入
名称.put(数据)
名称.get(数据)
4.名称.start()
5.名称.join()
使用Pipe管道通信交换数据(双向通信,可发送可接收):
1.创建Pipe双向管道
c1,c2 = pipe()
2.通信
c1.send('数据')#c2会收到
c2.recv('数据')
多线程间通信
使用Queue队列通信交换数据(单向通信):
1.父进程创建Queue
名称 = Queus()
2.创建进程
3.进程相对应函数加入
名称.put(数据)
名称.get(数据)
4.名称.start()
5.名称.join()