首页 > 代码库 > python学习第三十一节

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

多进程的联系。

 

python学习第三十一节