V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Wangjl
V2EX  ›  问与答

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

  •  
  •   Wangjl · 2018-11-28 09:44:09 +08:00 · 2419 次点击
    这是一个创建于 2193 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    从 Python 的层面上考虑
    Python 线程这个概念其实还是和 OS 统一的,虽然 GIL 会导致永远只有一个线程在运行,但是还是需要按照多线程的方式来思考问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2265 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:53 · PVG 08:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.