python网络编程 ---- 事件wait set

一***进程 锁 信号量

1.守护进程的定义:


                     1. 在开启子进程之前要设置守护进程

                      2. 作用:守护主进程代码结束,如果子进程还要运行就会跟着主进程一起结束---可以避免形成僵尸进程。

2.锁为了解决数据安全


                    1.并行机制等待依赖着运行完之后才可以进行,

                     2.保证多个进程修改同一块数据的时候,同一时间只能修改一              块数据,即串行的修改,速度慢了但是会保证数据的安全

                      3.multiprocessing.Lock

                        lock=Lock()

                       lock.acquire()               #获得锁

                       print("Hello World ! ! !")

                      lock.release()                #释放锁

3.信号量=锁+计数器


sem=Semaphore(5)                        #同一时间可以允许五个同时开启

 #类+()实例化对象得到的实例用锁得方法acquire   release

#信号量的机制来模仿可以允许最大接收量

def room(i,sem):

sem.acquire()

print("%s走进房间" % i)

time.sleep(random.random())

print("%s走出房间" % i)

sem.release()

if __name__ =='__main__':

sem = Semaphore(3)

list=[]

for iin range(10):

p=Process(target=room,args=(i+1,sem))

p.start()

list.append(p)

for jin list:

j.join()

二***事件

1.事件:控制进程执行还是阻塞一个机制


wait等待方法:在事件中有一个标志为True 执行效果为pass继续执行 

                         这个标志为False,wait方法的效果是阻塞,直到变为True

2.事件的控制标志:


                          is_set      判断标志的状态

                           set 方法    将标志设置为True

                          clear方法   将方法设置为False

#事件实例化出对象

# e=Event()

# print(e.is_set())      #默认标志为False 查看标志状态

# e.set()                #调用set方法变为True

# print(e.is_set())

# e.wait()                #等待标志

# print("Hello World")

# e.clear()                #将表值设为False

# print(e.is_set())


 def func(e):

    e.wait()

    print("Hello World")# if __name__ == '__main__':

    e=Event()

    p=Process(target=func,args=(e,))

    p.start()

  e.set()                  #将标志状态设为True

  print(e.is_set())


#交通状况红绿灯 车通行


def traffic(e):

while True:

#红灯的话用clear标志变为False绿灯的话用set设置为True

        if e.is_set():     #is_set()==True

            e.clear()

print("\033[31m 红灯停 \033[0m")

time.sleep(1)

else:

e.set()

print("\033[32m 绿灯行 \033[0m")

time.sleep(1)

def car(e,i):

if e.is_set==False:# not e.is_set

        print("%s 号车等待通过" %(i+1))

e.wait()

print("%s 号车成功通过" % (i+1))

if __name__ =='__main__':

e=Event()

q=Queue()

tra=Process(target=traffic,args=(e,))

tra.start()

for iin range(10):

cra=Process(target=car,args=(e,i))

cra.start()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进程 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作...
    go以恒阅读 4,520评论 0 2
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 5,637评论 0 6
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,190评论 0 9
  • 进程间通信——队列和管道(multiprocess.Queue、multiprocess.Pipe) 进程间通信 ...
    go以恒阅读 5,741评论 0 3
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,187评论 0 2

友情链接更多精彩内容