python进线程——多线程

2020-02-27  本文已影响0人  TheRightPath1

1. 线程模块threading中的Thread

python的线程使用threading模块中的Thread类, 生成一个线程需要为Thread传递两个参数,target参数传递函数名,args参数传递函数需要的参数,它必须是一个元组, 如t1 = Thread(target=a, args=())

2. 当主线程退出时kill掉子线程

使用Thread类的setDaemon方法,将其设置为True可以将子线程设置为守护线程,即当主线程退出时守护线程kill掉.
代码示例

from threading import Thread
from time import sleep


def a():
    print(123)
    sleep(2)
    print(456)


def b():
    print(789)
    sleep(2)
    print(1011)


if __name__ == '__main__':
    print('start')
    t1 = Thread(target=a, args=())
    t2 = Thread(target=b, args=())
    t1.setDaemon(True)
    t2.setDaemon(True)
    t1.start()
    t2.start()
    print('end')

运行结果

start
123
789
end

3. 主线程等待子线程执行完成以后再继续执行

使用子线程的join方法
代码示例

from threading import Thread
from time import sleep


def a():
    print(123)
    sleep(2)
    print(456)


def b():
    print(789)
    sleep(2)
    print(1011)


if __name__ == '__main__':
    print('start')
    t1 = Thread(target=a, args=())
    t2 = Thread(target=b, args=())
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print('end')

运行结果

start
123
789
1011
456
end

4. 继承Thread类实现线程

当线程函数的逻辑比较复杂时需要采用继承Thread类的方法实现线程,之后重写run方法.
代码示例

class A(Thread):
    def __init__(self, name):
        super().__init__(name=name)

    def run(self) -> None:
        print(123)
        sleep(2)
        print(456)
上一篇 下一篇

猜你喜欢

热点阅读