Socket.recv() никогда не возвращает малиновый пико в микропитоне _thread ⇐ Python
Socket.recv() никогда не возвращает малиновый пико в микропитоне _thread
У меня на пико две петли. Один должен проверять изменения контактов GPIO, другой прослушивает сообщения TCP.
Оба цикла по отдельности работают нормально. Но если я выполняю потоковую обработку, Socket.recv внезапно просто зависает/никогда ничего не возвращает. Не исключение, просто бесконечное ожидание.
Вот псевдокод:
из времени импорта сна импортная машина защита подключения(): print("подключение к Wi-Fi") пытаться: соединять() кроме KeyboardInterrupt: машина.сброс() импортировать _thread some_communication_flag = Ложь some_communication_flag_is = Ложь защита core0_thread(): глобальный some_communication_flag из some_tcp_module импортировать next_message пока правда: сообщение = "" пытаться: печать("сообщение...") сообщение = следующее_сообщение() кроме исключения как e: распечатать(е) печать("сообщение", сообщение) если сообщение == "do_smth": some_communication_flag = Ложь если сообщение == "do_smth_else": some_communication_flag = Истина из some_gpio_stuff импорт set_gpio защита core1_thread(): глобальный some_communication_flag, some_communication_flag_is пока правда: спать(0.2) если some_communication_flag == some_communication_flag_is: продолжать some_communication_flag_is = some_communication_flag если some_communication_flag_is: set_gpio (1) еще: set_gpio (0) второй_поток = _thread.start_new_thread(core1_thread, ()) core0_thread() Я использую реализацию Redis на основе TCP, вот код: https://gist.github.com/yspreen/95fbe65 ... bac6faade6
У меня на пико две петли. Один должен проверять изменения контактов GPIO, другой прослушивает сообщения TCP.
Оба цикла по отдельности работают нормально. Но если я выполняю потоковую обработку, Socket.recv внезапно просто зависает/никогда ничего не возвращает. Не исключение, просто бесконечное ожидание.
Вот псевдокод:
из времени импорта сна импортная машина защита подключения(): print("подключение к Wi-Fi") пытаться: соединять() кроме KeyboardInterrupt: машина.сброс() импортировать _thread some_communication_flag = Ложь some_communication_flag_is = Ложь защита core0_thread(): глобальный some_communication_flag из some_tcp_module импортировать next_message пока правда: сообщение = "" пытаться: печать("сообщение...") сообщение = следующее_сообщение() кроме исключения как e: распечатать(е) печать("сообщение", сообщение) если сообщение == "do_smth": some_communication_flag = Ложь если сообщение == "do_smth_else": some_communication_flag = Истина из some_gpio_stuff импорт set_gpio защита core1_thread(): глобальный some_communication_flag, some_communication_flag_is пока правда: спать(0.2) если some_communication_flag == some_communication_flag_is: продолжать some_communication_flag_is = some_communication_flag если some_communication_flag_is: set_gpio (1) еще: set_gpio (0) второй_поток = _thread.start_new_thread(core1_thread, ()) core0_thread() Я использую реализацию Redis на основе TCP, вот код: https://gist.github.com/yspreen/95fbe65 ... bac6faade6
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Пико Ферми Бублик: Зачем неверный корпус напечатан, когда 0 в списке чисел?
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-