이 글은 주로 Python 멀티스레드 이벤트 사용에 대한 자세한 설명을 소개하고 있습니다. 같이 구경가자
서문
친구 a, b, c가 모여서 전골을 먹었어요. 요리가 다 나왔을 때, 주인이 먹자고 했어요! , 그래서 친구들은 젓가락을 함께 움직였고, 이 시나리오를 구현하는 방법
Event(event)
Event(event): 이벤트 처리 메커니즘: 내장 플래그 Flag는 전역적으로 정의됩니다. 그런 다음 프로그램이 event.wait 메소드가 실행될 때 차단됩니다. Flag 값이 True이면 event.wait 메소드는 더 이상 차단되지 않습니다.
Event는 실제로 Condition의 단순화된 버전입니다. 이벤트에는 잠금이 없으며 스레드가 동기 차단 상태로 들어가도록 할 수 없습니다.
Event()
set(): 플래그를 True로 설정하고 대기 중인 차단 상태의 모든 스레드에 실행을 재개하도록 알립니다.
clear(): 플래그를 False로 설정합니다.
wait(timeout): 플래그가 True이면 즉시 반환되고, 그렇지 않으면 스레드는 대기 차단 상태에서 차단되고 다른 스레드가 set()을 호출할 때까지 기다립니다.
isSet(): 내장 플래그 상태를 가져오고 True 또는 False를 반환합니다.
이벤트 사례 1
시나리오: 파트너 a와 b가 알림 event.set()을 수신하면 스레드 a와 b가 실행됩니다
# coding:utf-8 import threading import time event = threading.Event() def chihuoguo(name): # 等待事件,进入等待阻塞状态 print '%s 已经启动' % threading.currentThread().getName() print '小伙伴 %s 已经进入就餐状态!'%name time.sleep(1) event.wait() # 收到事件后进入运行状态 print '%s 收到通知了.' % threading.currentThread().getName() print '小伙伴 %s 开始吃咯!'%name # 设置线程组 threads = [] # 创建新线程 thread1 = threading.Thread(target=chihuoguo, args=("a", )) thread2 = threading.Thread(target=chihuoguo, args=("b", )) # 添加到线程组 threads.append(thread1) threads.append(thread2) # 开启线程 for thread in threads: thread.start() time.sleep(0.1) # 发送事件通知 print '主线程通知小伙伴开吃咯!' event.set()
결과:
Thread-1이 시작되었습니다
파트너A가 다이닝 상태에 들어갔습니다!
Thread-2가 시작되었습니다
친구b가 식사상태에 들어갔습니다!
메인 스레드는 친구들에게 식사를 시작하라고 알립니다!
Thread-1님이 알림을 받았습니다.
친구A, 식사 시작!
Thread-2가 알림을 받았습니다.
친구B가 식사를 시작합니다!
이벤트 사례 2
장면: 친구 a, b, c가 모인 후 손님을 초대한 사람이 말했습니다. 밥 먹자!
# coding:utf-8 import threading import time event = threading.Event() def chiHuoGuo(name): # 等待事件,进入等待阻塞状态 print '%s 已经启动' % threading.currentThread().getName() print '小伙伴 %s 已经进入就餐状态!'%name time.sleep(1) event.wait() # 收到事件后进入运行状态 print '%s 收到通知了.' % threading.currentThread().getName() print '%s 小伙伴 %s 开始吃咯!'%(time.time(), name) class myThread (threading.Thread): # 继承父类threading.Thread def __init__(self, name): '''重写threading.Thread初始化内容''' threading.Thread.__init__(self) self.people = name def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 '''重写run方法''' chiHuoGuo(self.people) # 执行任务 print("qq交流群:226296743") print("结束线程: %s" % threading.currentThread().getName()) # 设置线程组 threads = [] # 创建新线程 thread1 = myThread("a") thread2 = myThread("b") thread3 = myThread("c") # 添加到线程组 threads.append(thread1) threads.append(thread2) threads.append(thread3) # 开启线程 for thread in threads: thread.start() time.sleep(0.1) # 发送事件通知 print '集合完毕,人员到齐了,开吃咯!' event.set()
작업 결과:
Thread-1이 시작되었습니다
친구A가 식사 상태에 들어갔습니다!
Thread-2가 시작되었습니다
친구b가 식사상태에 들어갔습니다!
Thread-3이 시작되었습니다
친구c가 식사상태에 들어갔습니다!
모임 완료, 다 모였으니 먹자!
Thread-1님이 알림을 받았습니다.
1516780957.47 친구A, 식사 시작!
QQ 커뮤니케이션 그룹 : 226296743
종료 스레드 : Thread-1
Thread-3 알림을 받았습니다.
1516780957.47 친구c 식사 시작! Thread-2님이 알림을 받았습니다.
qq 커뮤니케이션 그룹 : 2262967431516780957.47 친구B, 식사 시작! 끝 스레드: Thread-3
qq 교환 그룹: 226296743
끝 스레드: Thread-2
관련 권장 사항:
위 내용은 Python 멀티스레딩에서 이벤트 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!