V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Wangjl
V2EX  ›  问与答

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

  •  
  •   Wangjl · Nov 28, 2018 · 2732 views
    This topic created in 2708 days ago, the information mentioned may be changed or developed.

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

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

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

    从 Python 的层面上考虑
    Python 线程这个概念其实还是和 OS 统一的,虽然 GIL 会导致永远只有一个线程在运行,但是还是需要按照多线程的方式来思考问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1819 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 16:17 · PVG 00:17 · LAX 09:17 · JFK 12:17
    ♥ Do have faith in what you're doing.