/
Russid
/
python_advanced
Обзор
Документация
Войти
/
Russid
/
python_advanced
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
module_11_multitasking/homework/hw3/main.py
51 строка
1 KB
Alexander Kharlamov
typing and flask versions
28 янв 2023, 17:44
28 янв 2023, 17:44
ce932aa
Код
Авторство
О чём код?
import logging import random import threading import time from typing import List TOTAL_TICKETS: int = 10 logging.basicConfig(level=logging.INFO) logger: logging.Logger = logging.getLogger(__name__) class Seller(threading.Thread): def __init__(self, semaphore: threading.Semaphore) -> None: super().__init__() self.sem: threading.Semaphore = semaphore self.tickets_sold: int = 0 logger.info('Seller started work') def run(self) -> None: global TOTAL_TICKETS is_running: bool = True while is_running: self.random_sleep() with self.sem: if TOTAL_TICKETS <= 0: break self.tickets_sold += 1 TOTAL_TICKETS -= 1 logger.info(f'{self.name} sold one; {TOTAL_TICKETS} left') logger.info(f'Seller {self.name} sold {self.tickets_sold} tickets') def random_sleep(self) -> None: time.sleep(random.randint(0, 1)) def main() -> None: semaphore: threading.Semaphore = threading.Semaphore() sellers: List[Seller] = [] for _ in range(4): seller = Seller(semaphore) seller.start() sellers.append(seller) for seller in sellers: seller.join() if __name__ == '__main__': main()