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+
的 asyncio
和 async/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
我有一个场景(python 3.7+):
我有一个 python 脚本,在执行过程中的某个时刻,我在守护进程模式下启动一个线程(使用 threading
库)以无限循环将消息发送到输出设备。现在,在这个线程启动后,我想定期更改正在发送的消息。此外,在某些时候我想 "kill" 线程并停止消息发送循环。
所以线程调用的函数基本上有一个 while True:
循环调用一些消息发送函数。像 send_message(the_msg)
这样的东西,其中 the_msg
是一个全局变量。然后如果我想调整发送的内容,我只需更改 the_msg
.
这很好用,我想知道这种基于用例的方法是否可行。另外,我不太熟悉 3.7+
的 asyncio
和 async/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