Je voulais vérifier le fonctionnement multi-thread, j'ai donc créé Zundokokiyoshi.
Demandez à trois chanteurs d'enfiler et de chanter "Zun" ou "Doko" à 1 seconde d'intervalle.
La file d'attente est compatible avec plusieurs threads et peut récupérer les données stockées de plusieurs threads dans l'ordre. Je compare cela à un microphone.
Puisque différents threads doivent faire référence au même objet, nous comparons ZUN ou DOKO en utilisant ʻisau lieu de
==`.
# -*- coding:utf-8 -*-
import time
from random import random
from threading import Thread, Event
from Queue import Queue
ZUN = "Bouse"
DOKO = "Doco"
KIYOSHI = "Ki yo shi!"
class Singer(Thread):
def __init__(self, mic):
'''Préparation:Tenez le microphone et attendez les instructions de début et de fin'''
super(Singer, self).__init__()
self.mic = mic
self.singing = Event()
def run(self):
'''début:Chantez Zun ou Doko chaque seconde'''
self.singing.set()
while self.singing.is_set():
time.sleep(1)
word = ZUN if random() < 0.5 else DOKO
self.mic.put(word)
def stop(self):
'''Fin:Terminer le chant'''
if self.singing.is_set():
self.singing.clear()
self.join()
def zundoko():
#Microphone
mic = Queue()
#Demandez à trois chanteurs de commencer à chanter dans un seul microphone
the_number_of_singer = 3
singers = [Singer(mic) for i in range(the_number_of_singer)]
for singer in singers:
singer.start()
try:
#Si vous entendez "Doko" après que "Zun" continue 4 fois, criez "Ki Yo Shi!"
zun = 0
kiyoshi = False
while kiyoshi == False:
word = mic.get()
print word
if word is ZUN:
zun += 1
elif word is DOKO:
if zun >= 4:
kiyoshi = True
zun = 0
print KIYOSHI
finally:
#Que le chanteur finisse de chanter(CTRL+Même lorsqu'il est forcé de se terminer avec C)
for singer in singers:
singer.stop()
if __name__ == '__main__':
zundoko()