Advertisement
plarmi

threading2

Apr 17th, 2024 (edited)
762
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.66 KB | None | 0 0
  1. """
  2. Пользователь с клавиатуры вводит путь к файлу.
  3. После чего создаются три потока. Первый поток заполняет файл случайными числами. Два других потока
  4. ожидают заполнения. Когда файл заполнен оба потока
  5. стартуют. Первый поток находит все простые числа, второй поток факториал каждого числа в файле. Результаты
  6. поиска каждый поток должен записать в новый файл. На
  7. экран необходимо отобразить статистику выполненных
  8. операций.
  9. """
  10.  
  11. from threading import Thread, Lock
  12. from random import randint
  13.  
  14. path = input("Введите путь к файлу: ").replace("\"", "")
  15.  
  16. lock = Lock()
  17.  
  18. def random_numbers(count):
  19.     with lock:
  20.         with open(path, "a", encoding="utf-8") as write_file:
  21.             for i in range(count):
  22.                 write_file.write(f"{randint(1, 10)}\n")
  23.  
  24. def is_prime(num):
  25.     if num < 2:
  26.         return False
  27.     for i in range(2, int(num**0.5)+1):
  28.         if num % i == 0:
  29.             return False
  30.     return True
  31.  
  32. def factorial(num):
  33.     if num == 0:
  34.         return 1
  35.     return factorial(num - 1) * num
  36.  
  37. def fact_from_file():
  38.     with lock:
  39.         factorial_numbers = []
  40.         with open(path, "r", encoding="utf-8") as read_file:
  41.             numbers = read_file.read().splitlines()
  42.  
  43.         for i in numbers:
  44.             factorial_numbers.append(str(factorial(int(i))))
  45.  
  46.         with open(path[:path.rfind("\\")] + "\\" + "new.txt", "a", encoding="utf-8") as write_file:
  47.             write_file.write(f"\nФакториалы чисел:\n{", ".join(factorial_numbers)}")
  48.  
  49.  
  50.  
  51. def prime_from_file():
  52.     with lock:
  53.         prime_numbers = set()
  54.         with open(path, "r", encoding="utf-8") as read_file:
  55.             numbers = read_file.read().splitlines()
  56.  
  57.         for i in numbers:
  58.             if is_prime(int(i)):
  59.                 prime_numbers.add(i)
  60.  
  61.  
  62.         with open(path[:path.rfind("\\")] + "\\" + "new.txt", "a", encoding="utf-8") as write_file:
  63.             if not prime_numbers:
  64.                 write_file.write(f"Простые числа:\nнет")
  65.             else:
  66.                 write_file.write(f"Простые числа:\n{", ".join(prime_numbers)}")
  67.  
  68.  
  69. thread1 = Thread(target=random_numbers, args=[10])
  70. thread2 = Thread(target=prime_from_file)
  71. thread3 = Thread(target=fact_from_file)
  72. thread1.start()
  73. thread1.join()
  74.  
  75. thread2.start()
  76. thread3.start()
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement