Python 特定用例的线程与异步

Python threading vs asyncio for specific use case

我有一个场景(python 3.7+):

我有一个 python 脚本,在执行过程中的某个时刻,我在守护进程模式下启动一个线程(使用 threading 库)以无限循环将消息发送到输出设备。现在,在这个线程启动后,我想定期更改正在发送的消息。此外,在某些时候我想 "kill" 线程并停止消息发送循环。

所以线程调用的函数基本上有一个 while True: 循环调用一些消息发送函数。像 send_message(the_msg) 这样的东西,其中 the_msg 是一个全局变量。然后如果我想调整发送的内容,我只需更改 the_msg.

的值

这很好用,我想知道这种基于用例的方法是否可行。另外,我不太熟悉 3.7+asyncioasync/await 功能,该库是否适合这种情况?从 threading 切换是否值得?无论哪种情况,您如何 "kill" 线程或 运行 进程?

关于这两个库,我怀疑您会发现差异,尽管从纯粹的个人观点来看,我在这个用例中使用了线程。

就更改消息而言,线程使用共享内存,因此除非您有其他约束,否则访问全局是合适的?

为了通知线程应该退出,我会使用一个事件:Docs 类似于:

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