У меня есть две функции, которые должны работать одновременно.read_card
должен работать в бесконечном цикле и ждать новых карточек (на самом деле это считыватель Nrf) и добавляет некоторую строку в очередь, send_data
предполагается получить значения из очереди и отправить их на сервер через библиотеку запросов.Все работает, когда я не использую многопроцессорность.Но мне нужен параллелизм, я думаю.
Вот мои две функции.
def read_card(reader, configs):
print("First started")
while True:
authorized_uid = reader.is_granted(reader.read())
print("Waiting for card")
#TODO:If not authorized in AccessList.txt look to the server
if authorized_uid is not None:
print(authorized_uid)
open_door()
check_model = CheckModel(configs.DeviceSerialNumber, authorized_uid)
message_helper.put_message(check_model)
def send_data(sender):
print("Second started")
while True:
message_model = message_helper.get_message()
if message_model is not None:
sender.send_message(message_model)
Вот как я называю main
def main():
download_settings()
create_folders()
settings = read_settings()
accessList = get_user_list(settings)
configure_scheduler(settings)
message_sender = MessageSender(client.check,client.bulk)
reader_process = multiprocessing.Process(name = "reader_loop", target = read_card, args=(Reader(accessList, entryLogger),configs,))
message_process = multiprocessing.Process(name = "message_loop", target = send_data, args=(message_sender,))
reader_process.start()
message_process.start()
if __name__ == '__main__':
main()
И это для отладки.Я напечатал, что put_message
и send_message
из разных классов.
def send_message(self,model):
print(model)
return self.checkClient.check(model)
def put_message(self, message):
print(message)
self.put_to_queue(self.queue, message)
self.put_to_db(message)
Я ожидаю увидеть некоторые имена объектов в терминале, но я вижу только ниже.Также не работает ридер.
First started
Second started
Какую часть я делаю не так?