Форум сайта python.su
Всем доброго времени суток! Есть такая проблема. Я разрабатываю пропускную систему для колледжа - турникет открывается с помощью QR-кода. Все настроено с базой данных, сама система работает стабильно. Но есть один нюанс:
там стоят два сканнера, один на вход и один на выход и если два человека просканируют свой код одновременно, система выйдет из строя. Сначала она сработает у одного человека, а затем у второго. Но если продолжить сканирование, это приведет к непредсказуемому переключению турникетов. Если вы представите, что вместо двух человек их будет 5 или 7, то они начнут бесконтрольно сканировать коды. И так. Есть ли какой-нибудь способ заблокировать ввод данных на время обработки некоторых данных? Код выглядит примерно так:
def do_smth(input_data): #этот код выполняется в течение примерно 3-5 секунд, пока человек не пройдет через турникет def main(): while True: input_data = input() do_smth(input_data)
Отредактировано Wor7hless (Авг. 28, 2024 11:06:41)
Офлайн
турникет один на вход и один на выход? Или один турникет на вход и на выход?
class QRScannerStateMachine: def __init__(self): self.state = 'waiting_for_activation' print(f"Состояние: {self.state}") def activate(self): if self.state == 'waiting_for_activation': self.state = 'ready_to_scan' print(f"Состояние: {self.state} - Сканер активен и готов к сканированию.") else: print("Сканер уже активен или находится в другом состоянии.") def scan_qr_code(self, qr_code): if self.state == 'ready_to_scan': print(f"QR-код обнаружен: {qr_code}") self.state = 'scanning' self.process_qr_code(qr_code) else: print("Сканер не готов к сканированию.") def process_qr_code(self, qr_code): if self.state == 'scanning': print(f"Сканирование QR-кода: {qr_code}") # Здесь идет обработка QR-кода, например, передача в базу данных if self.validate_qr(qr_code): self.state = 'processing_data' self.complete_scanning() else: self.state = 'error' self.handle_error("QR-код не распознан.") else: print("Неверное состояние для обработки QR-кода.") def validate_qr(self, qr_code): # Простая проверка кода: если код "1", значит он верен return qr_code == "1" def complete_scanning(self): if self.state == 'processing_data': print("QR-код успешно обработан. Возврат в готовность.") self.state = 'ready_to_scan' else: print("Неверное состояние для завершения сканирования.") def handle_error(self, message): print(f"Ошибка: {message}") # Сбрасываем в исходное состояние готовности self.state = 'ready_to_scan' print(f"Состояние: {self.state} - Сканер готов к следующему сканированию.") def deactivate(self): if self.state != 'waiting_for_activation': self.state = 'waiting_for_activation' print("Сканер отключен.") else: print("Сканер уже отключен.") # Пример использования: scanner = QRScannerStateMachine() scanner.activate() # Активируем сканер while True: qr = input("> ") scanner.scan_qr_code(qr)
Отредактировано xam1816 (Авг. 28, 2024 15:01:18)
Офлайн
xam1816Один на вход и один на выход
турникет один на вход и один на выход? Или один турникет на вход и на выход?
Офлайн
> Есть ли какой-нибудь способ заблокировать ввод данных на время обработки некоторых данных?
Не нужно ничего блокировать! Создай на каждый пункт пропуска свой поток/процесс. За счёт этого они смогут работать не зависимо.
Офлайн