Python线程与asyncio的特定用例

时间:2019-06-07 20:03:08

标签: python python-asyncio python-multithreading

我有某种情况(python 3.7 +):

我有一个python脚本,在执行过程中的某个时候,我以守护程序模式(使用threading库)开始一个线程,以无休止的循环将消息发送到输出设备。现在,在启动该线程之后,我会定期更改要发送的消息。另外,在某个时候,我想“杀死”线程并停止消息发送循环。

因此,线程调用的函数基本上具有一个while True:循环,该循环调用某些消息发送函数。类似send_message(the_msg),其中the_msg是全局变量。然后,如果要调整发送的内容,只需更改the_msg的值即可。

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

1 个答案:

答案 0 :(得分:0)

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

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

要通知线程应退出,我将使用一个事件: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