首页 > 解决方案 > 针对特定用例的 Python 线程与异步

问题描述

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

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

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

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

标签: pythonpython-asynciopython-multithreading

解决方案


关于这两个库,我怀疑你会看到区别,尽管从纯粹的个人观点来看,我在这个用例中使用了线程。

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

要消息线程应该退出,我会使用一个事件:文档类似于:

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

推荐阅读