Python Threads против Asyncio для конкретного случая использования - PullRequest
0 голосов
/ 07 июня 2019

У меня есть определенный сценарий (python 3.7 +):

У меня есть сценарий python, в какой-то момент во время выполнения я запускаю поток в режиме демона (используя библиотеку threading) для отправки сообщений вУстройство вывода в бесконечной петле.Теперь, после запуска этой темы, я периодически хотел бы изменить отправляемое сообщение.Кроме того, в какой-то момент я бы хотел «убить» поток и остановить цикл отправки сообщений.

Так что функция, которую вызывает поток, в основном имеет цикл while True:, который вызывает некоторую функцию отправки сообщений.Что-то вроде send_message(the_msg), где the_msg - глобальная переменная.Затем, если я хочу изменить то, что отправляется, я просто изменяю значение the_msg.

. Это прекрасно работает, мне интересно, подходит ли этот подход, основанный на сценарии использования.Кроме того, я не слишком знаком с функциями asyncio и async/await 3.7+, является ли эта библиотека кандидатом для этого сценария?Стоит ли переключаться с threading?В любом случае, как вы «убиваете» поток или запущенный процесс?

1 Ответ

0 голосов
/ 08 июня 2019

Что касается двух библиотек, я сомневаюсь, что вы увидите разницу, хотя из чисто личного мнения я использовал многопоточность для этого варианта использования.

Что касается изменения сообщения, то потоки используют разделяемыйпамять, так что доступ к глобальному подходит, если у вас нет каких-либо других ограничений?

Для сообщения о выходе из потока я бы использовал событие: Документы что-то вроде:

should_exit = threading.Event()

# Daemon Thread
while not should_exit.is_set():
    # Do stuff here

# Main Thread
should_exit.set() # this will exit the daemon thread
...