美文网首页Python
python 线程的启动和停止

python 线程的启动和停止

作者: 孙广宁 | 来源:发表于2022-05-30 23:23 被阅读0次
    12.1 我们用python创建一个线程,并在合适的时候销毁
    • threading库可以用来在单独的线程中执行任意的python可调用对象。
    • 可以创建一个Thread实例,并为它提供可执行的代码
    >>> import time
    >>> def c(n):
    ...     while n>0:
    ...         print("T-minus",n)
    ...         n -=1
    ...         time.sleep(3)
    ...
    >>> from threading import Thread
    >>> t = Thread(target=c,args=(10,))
    >>> t.start()
    T-minus 10
    T-minus 9
    T-minus 8
    T-minus 7
    T-minus 6
    T-minus 5
    T-minus 4
    T-minus 3
    T-minus 2
    T-minus 1
    
    • 当创建一个线程实例时,在调用它的start方法之前,线程并不会立即执行。
    • 一旦启动后,线程就开始独立的运行,直到目标函数返回为止,可以查询线程实例来判断它是否在运行
    >>> if t.is_alive():
    ...     print("still running")
    ... else:
    ...     print("finish")
    ...
    finish
    
    • 也可以请求链接到某个线程上
    >>> t.join()
    
    • 解释器会一直保持运行,直到所有的线程都终止为止。
    • 对于需要长时间运行的线程或一直不断运行的后台任务,应该考虑将这些线程设置为daemon
    >>> t =Thread(target=c,args=(10,),daemon=True)
    >>> t.start()
    
    • daemon线程是无法被join的,但是主线程结束后会自动销毁
    • 除了join和daemon外,对于python线程没有太多别操作可以做了
    • 如果想要终止线程,给线程发信号等这些操作都需要自定义
    >>> class C:
    ...     def __init__(self):
    ...         self._running=True
    ...     def terminate(self):
    ...         self._running=False
    ...     def run(self,n):
    ...         while self._running and n>0:
    ...             print("T-minus",n)
    ...             n -=1
    ...             time.sleep(5)
    ...
    >>> c =C()
    >>> t =Thread(target=c.run,args=(10,))
    >>> t.start()
    T-minus 10
    T-minus 9
    >>> c.terminate()
    
    • 如果线程的执行I/O操作受到阻塞时,可能会导致线程永远卡在I/O上无法退出,需要在线程上加上超时处理settimeout

    相关文章

      网友评论

        本文标题:python 线程的启动和停止

        本文链接:https://www.haomeiwen.com/subject/veyaprtx.html