import threading
import time
CLOCKPERIOD = 0.10 # decrease for speed!
USE_GIL = False # For more speed
ONE = 1
def threetimer():
while True:
yield 3.0
def fivetimer():
while True:
yield 5.0
def fifteentimer():
while True:
yield 15.0
def numtimer():
while True:
yield 1.0
def newlinetimer():
while True:
yield 1.0
def numprinter(starttime):
i = ONE
for delay in numtimer():
time.sleep(delay * CLOCKPERIOD)
if time.time() > starttime + 100.5 * CLOCKPERIOD:
break
print(str(i), end='')
i = i + ONE
def threeprinter(starttime):
for delay in threetimer():
time.sleep(delay * CLOCKPERIOD)
if time.time() > starttime + 100.5 * CLOCKPERIOD:
break
print('\rFIZZ', end='')
def newlineprinter(starttime):
for delay in newlinetimer():
time.sleep(delay * CLOCKPERIOD)
if time.time() > starttime + 100.5 * CLOCKPERIOD:
break
print('')
def fiveprinter(starttime):
for delay in fivetimer():
time.sleep(delay * CLOCKPERIOD)
if time.time() > starttime + 100.5 * CLOCKPERIOD:
break
print('\rBUZZ', end='')
def fifteenprinter(starttime):
for delay in fifteentimer():
if time.time() > starttime + 100.5 * CLOCKPERIOD:
break
time.sleep(delay * CLOCKPERIOD)
print('\rFIZZBUZZ', end='')
if __name__ == '__main__':
p = threading.Thread(target=numprinter, kwargs={'starttime': time.time()})
p3 = threading.Thread(target=threeprinter, kwargs={'starttime': time.time()})
p2 = threading.Thread(target=newlineprinter, kwargs={'starttime': time.time()})
p4 = threading.Thread(target=fiveprinter, kwargs={'starttime': time.time()})
p5 = threading.Thread(target=fifteenprinter, kwargs={'starttime': time.time()})
p.start()
time.sleep(CLOCKPERIOD * 0.10)
p3.start()
time.sleep(CLOCKPERIOD * 0.10)
p4.start()
time.sleep(CLOCKPERIOD * 0.10)
p5.start()
time.sleep(CLOCKPERIOD * 0.10)
p2.start()
p.join()
p2.join()
p3.join()
p4.join()
p5.join()
print('')