fork download
  1. import threading
  2. import time
  3. import random
  4.  
  5.  
  6. def do_shit() -> None:
  7. '''Эту функцию будет вызывать другая - "сигнальная" функция'''
  8. print(f'Shit called at {time.perf_counter()-START}')
  9. print(f'Shit got: {random.randint(1,1000)}') # имитируем какую-то херню
  10.  
  11.  
  12. def signal_loop() -> None:
  13. '''Функция должна сигналить раз в 3 секунды, запускается в отдельном Thread'''
  14. print(f'signal_loop started at {time.perf_counter() - START}')
  15. while True:
  16. t = threading.Thread(target=do_shit, daemon=True)
  17. t.run()
  18. time.sleep(3)
  19. print(f'signal_loop ended at {time.perf_counter() - START}') # по идее это не должно вызваться никогда
  20.  
  21.  
  22. def find_prime(maxx: int) -> None:
  23. '''Занимающая CPU процедура'''
  24. print(f'find_prime started at {time.perf_counter() - START}')
  25. primes = []
  26. for num in range(3, int(maxx)+1, 2): # типо ищем простые числа
  27. for i in range(3, int(num**0.5)+1, 2):
  28. if num % i == 0:
  29. break
  30. else:
  31. primes.append(num)
  32. print(f'find_prime ended at {time.perf_counter() - START}')
  33.  
  34.  
  35. def main() -> None:
  36. '''Отсюда вызываем 2 другие функции - сигнальную и занимающую CPU'''
  37. t1 = threading.Thread(target=find_prime, args=[1e6])
  38. t2 = threading.Thread(target=signal_loop, daemon=True) # когда закончится 1й тред, эта хрень тоже должна кончиться
  39. t1.start()
  40. t2.start()
  41.  
  42.  
  43. if __name__ == '__main__':
  44. print('Starting main thread')
  45. START = time.perf_counter() # относительно START считаем прошедшее время
  46. main()
  47. print(f'Main thread ended at {time.perf_counter() - START}')
Success #stdin #stdout 1.93s 15228KB
stdin
Standard input is empty
stdout
Starting main thread
find_prime started at 9.572133421897888e-05
signal_loop started at 0.019391842186450958
Shit called at 0.01943707838654518
Shit got: 778
Main thread ended at 0.019470270723104477
find_prime ended at 1.912597432732582