python学习第三十一节
event模块
event.wait() 等待相当于标志位为False。()内可以传参数数字,为几秒。
event.set()给另一个线程传标志位True。
队列 queue
和列表类似,但是函数内置了互斥锁,保证了线程安全。是具有线程安全的数据结构。
put传进去,get取出来,取是先进先出的方法,吃了拉,而且queue没有别的方法。
上图这种情况没有意义,最后一次get取不到值在等待put 单线程写到后面的put并不能运行,需要再
开一个线程。
取值之后,queue就少了一个。
如上图put里写block=False参数,当queue满了在添加,将报错而不是卡死。
上图如上上图效果一样,写法不一样。
如上图,get参数可以写block=False 当取不到值的时候立刻报错。
上图和上上图效果一样,写法不一样。
put之后加入一个join可以阻塞该子线程后面的程序,然后另一个线程取出来需要每次都要task_done()
表示执行完毕,当所有任务完成之后会继续上一个线程的后面任务。
q.empty()
如果queue为空布尔值为True
priority优先级
如上图,设置优先级的例子。
生产者消费者模型
多进程
1 from multiprocessing import Process#import 2 import os 3 import time 4 5 6 def info(name): 7 '''打印父进程PID和进程PID''' 8 print("name:", name)#打印名字 9 print('parent process:', os.getppid())#获取父进程ID 10 print('process id:', os.getpid())#获取子进程ID 11 print("------------------") 12 time.sleep(1) 13 14 15 def foooooo(name): 16 '''调用info''' 17 info(name) 18 19 20 if __name__ == '__main__': 21 info('main process line') 22 23 process_one = Process(target=info, args=('alvin',))#创建一个进程 24 process_two = Process(target=foooooo, args=('egon',)) 25 process_one.start()#激活这个进程 26 process_two.start() 27 28 process_one.join()#进程的join和线程的join是一样的,子进程运行结束之后运行主进程 29 process_two.join() 30 31 print("ending")#主进程
多进程的联系。
中天一片无情月,是我平生不悔心