在没有.join()和阻塞主线程的情况下清理线程

2024-04-28 15:52:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我所处的情况是,我有两个端点,我可以要求一个值,其中一个可能比另一个更快。对端点的调用被阻塞。我想等待其中一个完成,然后在不等待另一个完成的情况下获取结果。你知道吗

我的解决方案是在不同的线程中发出请求,并让这些线程在完成时将标志设置为true。在主线程中,我不断地检查标志(我知道这是一个繁忙的等待,但这不是我现在最关心的问题),当一个线程完成时,它接受该值并返回它作为结果。你知道吗

我的问题是,我从来没有清理其他线程。如果不使用.join(),我找不到任何方法来实现它,这只会阻碍和挫败整个事情的目的。那么,如何清理另一个阻塞的、速度较慢的线程,而不从主线程连接它呢?你知道吗


Tags: 方法目的true标志情况解决方案端点事情
2条回答

您想要的是使您的线程daemon,因此当您得到结果并完成main时,另一个正在运行的线程将被迫完成。您可以将daemon关键字更改为True

tr = threading.Thread(daemon=True)

^{}文档:

The significance of this flag is that the entire Python program exits when only daemon threads are left.

尽管:

Daemon threads are abruptly stopped at shutdown. Their resources (such as open files, database transactions, etc.) may not be released properly. If you want your threads to stop gracefully, make them non-daemonic and use a suitable signalling mechanism such as an Event.

我对Event没有什么特别的经验,所以不能详细说明。请随意点击链接继续阅读。你知道吗

一个糟糕而肮脏的解决方案是为关闭阻塞的套接字的线程实现方法。现在您必须在主线程中捕获异常。你知道吗

相关问题 更多 >