python - 针对特定用例的 Python 线程与异步
问题描述
我有一个特定的场景(python 3.7+):
我有一个 python 脚本,在执行过程中的某个时刻,我在守护进程模式下启动一个线程(使用threading
库),以无限循环向输出设备发送消息。现在,在这个线程启动后,我想定期更改正在发送的消息。另外,在某些时候我想“杀死”线程并停止消息发送循环。
所以线程调用的函数基本上有一个while True:
循环调用一些消息发送函数。像send_message(the_msg)
wherethe_msg
是一个全局变量。然后,如果我想调整发送的内容,我只需更改the_msg
.
这很好用,我想知道这种基于用例的方法是否可以。另外,我对asyncio
和的async/await
功能不太熟悉,3.7+
该库是否适合这种情况?是否值得从 切换threading
?无论哪种情况,您如何“杀死”线程或正在运行的进程?
解决方案
关于这两个库,我怀疑你会看到区别,尽管从纯粹的个人观点来看,我在这个用例中使用了线程。
至于更改消息,线程使用共享内存,因此除非您有其他约束,否则访问全局是合适的?
要消息线程应该退出,我会使用一个事件:文档类似于:
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
推荐阅读
- javascript - 我想要 Chatterbot 的回复列表?
- power-automate - 我可以使用 Power Automate Desktop 或 Power Automate Cloud (Flow) 从 Google Drive 中的 Google Sheet 获取行吗?
- typescript - 如何创建通用函数以从接口转换为实现类
- javascript - 如何将表单数据传递给控制器
- c# - 收到此错误“参数 2 无法从 'System.Collections.Generic.IEnumerable string ' 转换为 'string '”
- reactjs - 是否有任何用于 gcash 支付的 api 集成?
- android - JIT优化后如何查看Android代码?
- sql - 使用 WITH 语句 PostgreSQL 时列不存在
- wordpress - 有人在wordpress中注意到这个问题吗?
- react-native - 未捕获的错误。java.net.SocketTimeoutException