Python 中如何正确的关闭子线程?

2018-11-28 09:44:09 +08:00
 Wangjl

刚看了一本书,上面写关闭线程的方法就是 设定一个标记,然后根据标记强行停止。我晕,感觉挺奇怪的,反正就是觉得不合理。 请问 python 该怎么关闭线程才合理呢?

2334 次点击
所在节点    问与答
3 条回复
SeaRecluse
2018-11-28 10:05:32 +08:00
其实就是按书上的那样做,python 的线程是伪多线程,实际上并不是并发运行的。我推荐你用 python 的协程去处理事务
ClutchBear
2018-11-28 10:27:19 +08:00
@SeaRecluse #1 但是 python 的协程要每个函数都要用协程的写法才行. 如果改以前的代码好麻烦的.
但就协程而言, go 的协程最方便.
wevsty
2018-11-28 10:48:05 +08:00
让线程自己退出是最合理的。
原因是线程如果不是自己退出那么资源释放的问题没办法解决,因为多个线程可能引用了同一个资源,强行终止一个线程如果不释放资源那么就会又内存泄漏一类的毛病,如果强行终止以后强行释放资源那么其他线程又可能运行异常。

OS 层面上考虑
Win 下面 TerminateThread,可以强行终止线程,但是不会帮你做任何释放线程资源的工作。
Linux 的 pthread_cancel,并不是强行终止线程,只是发送退出信号,实际上也还是要线程自己退出的。

从 Python 的层面上考虑
Python 线程这个概念其实还是和 OS 统一的,虽然 GIL 会导致永远只有一个线程在运行,但是还是需要按照多线程的方式来思考问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512187

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX