Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung von Event im Python-Multithreading

Detaillierte Erläuterung der Verwendung von Event im Python-Multithreading

不言
不言Original
2018-04-27 09:59:242650Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Verwendung von Ereignissen im Python-Multithreading vor. Jetzt teile ich ihn mit Ihnen und gebe ihn als Referenz. Lasst uns gemeinsam einen Blick darauf werfen

Vorwort

Freunde a, b und c versammelten sich, um Hot Pot zu essen serviert, es war ein Genuss. Der Gastgeber sagte: Lasst uns essen! , also bewegten die Freunde ihre Stäbchen zusammen, wie kann man diese Szene realisieren?

Ereignis (Ereignis)

Ereignis (Ereignis): Ereignisverarbeitungsmechanismus: ein eingebauter Das Ereignis ist ein global definiertes Flag. Wenn der Flag-Wert „False“ ist, blockiert das Programm die Ausführung der Methode „event.wait“. Wenn der Flag-Wert „True“ ist, blockiert die Methode „event.wait“ nicht mehr.

Event ist eigentlich eine vereinfachte Version von Condition. Das Ereignis hat keine Sperre und kann nicht dazu führen, dass der Thread in einen synchronen Blockierungszustand übergeht.

Event()

  1. set(): Setzen Sie das Flag auf True und benachrichtigen Sie alle Threads im wartenden, blockierten Zustand, damit sie die Ausführung fortsetzen können.

  2. clear(): Setzen Sie das Flag auf False.

  3. wait(timeout): Wenn das Flag True ist, wird es sofort zurückgegeben, andernfalls wird der Thread im Warteblockierungszustand blockiert und wartet darauf, dass andere Threads set() aufrufen.

  4. isSet(): Ruft den integrierten Flag-Status ab und gibt True oder False zurück.

Ereignisfall 1

Szenario: Freunde a und b sind bereit, wenn die Benachrichtigung event.set empfangen wird (), Threads a und 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()

werden ausgeführt:

Thread- 1 Bereits gestartet
Freund a hat den Speisestatus betreten!
Thread-2 wurde gestartet
Der kleine Freund B hat den Essstatus erreicht!
Der Hauptthread benachrichtigt Freunde, mit dem Essen zu beginnen!
Thread-1 hat die Benachrichtigung erhalten.
Freund a, fang an zu essen!
Thread-2 hat die Benachrichtigung erhalten.
Der kleine Freund B beginnt zu essen!

Ereignisfall 2

Szene: Nachdem sich die Freunde a, b und c versammelt haben, sagte die Person, die die Gäste eingeladen hatte : Öffne Iss es!

# 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()

Laufergebnis:

Thread-1 wurde gestartet
Partner a ist eingetreten Speisestatus!
Thread-2 wurde gestartet
Der kleine Freund B hat den Essstatus erreicht!
Thread-3 wurde gestartet
Freund C hat den Speisestatus erreicht!
Die Versammlung ist beendet, alle sind da, lasst uns essen!
Thread-1 hat die Benachrichtigung erhalten.
1516780957.47 Freund a, fang an zu essen!
QQ-Kommunikationsgruppe: 226296743
Ende des Threads: Thread-1
Thread-3 hat die Benachrichtigung erhalten.
1516780957.47 Freund c Fangen Sie an zu essen! Thread-2 hat die Benachrichtigung erhalten.
QQ-Kommunikationsgruppe: 226296743

1516780957.47 Freund B, fang an zu essen! Endthread: Thread-3

qq-Austauschgruppe: 226296743
Endthread: Thread-2

Verwandte Empfehlungen:

Implementierung des Python-Thread-Pools Threadpool

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Event im Python-Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn