les_1.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import time
  2. import threading
  3. ### Базовое использование потоков
  4. def get_data_1(data):
  5. while True:
  6. print(f"<< вывод из другого потока {threading.current_thread().name} - {data}>>")
  7. time.sleep(1)
  8. data = str(time.time())
  9. def thread_test_1():
  10. thr = threading.Thread(target=get_data_1, args=(str(time.time()), ), name="Thr-1")
  11. thr.start()
  12. ite = 0
  13. while True:
  14. time.sleep(3)
  15. print(f"\n\n Вывод №{(ite:= ite+1)}: ")
  16. print(f"Наш личный поток работает?: {thr.is_alive()}")
  17. for ind, val in enumerate(threading.enumerate()):
  18. print(f"\t Активный поток №{ind+1}: {val}")
  19. print("\n\n")
  20. ### Демонстрация выполнения ТОЛЬКО по завершению работы (ф-я join)
  21. def get_data_2(data, value):
  22. for _ in range(value):
  23. print(f"<{threading.current_thread().name} - d:{data}, v:{value}> ")
  24. time.sleep(1)
  25. def thread_test_2():
  26. start_val, end_val = 1, 5
  27. # создаем функцию которая создает потоки
  28. tc = lambda x: threading.Thread(target=get_data_2, args=(str(time.time()), x,), name=f"thr-{x}", daemon=True)
  29. # создаем список потоков
  30. thr_list = [tc(x) for x in range(start_val, end_val + 1)]
  31. # запускаем потоки
  32. [x.start() for x in thr_list]
  33. # Ждем пока они завершаться (программа не дойдет до финиша, пока все потоки не завершат раобту)
  34. for i in thr_list:
  35. i.join()
  36. print("finish")
  37. thread_test_2()
  38. '''
  39. def get_data_1(data):
  40. while True:
  41. print(f"[{threading.current_thread().name}] - {data}")
  42. time.sleep(3)
  43. def get_data_2(data, value):
  44. for _ in range(value):
  45. print(f"[{threading.current_thread().name}] - {data}")
  46. time.sleep(1)
  47. # thr = threading.Thread(target=get_data, args=(str(time.time()), ), name="thr-1" )
  48. # thr.start()
  49. def thr_join():
  50. thr_list = []
  51. for i in range(3):
  52. thr = threading.Thread(target=get_data_2, args=(str(time.time()), i,), name=f"thr-{i}" )
  53. thr_list.append(thr)
  54. thr.start()
  55. for i in thr_list:
  56. i.join()
  57. print("finish")
  58. def set_name():
  59. print("name:", threading.main_thread().name)
  60. threading.main_thread().setName("maint_thread_new_name")
  61. print("result:", threading.main_thread().name)
  62. def print_thread_params():
  63. for i in range(100):
  64. print(f"current: {i}")
  65. time.sleep(1)
  66. if i%10 == 0:
  67. # количество активных потоков
  68. print("active thread:", threading.active_count())
  69. # выводит все запущенные потоки
  70. print("enumerate:", threading.enumerate())
  71. # работает ли поток в данный момент
  72. print("thr-1 is active", thr.is_alive())
  73. thr_join()
  74. '''