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")#主进程

多进程的联系。

原文地址:https://www.cnblogs.com/ArmoredTitan/p/7206312.html