Python 多线程 -- threading 模块

– Start

什么是多线程?

多线程指的是同时执行多个任务。

线程与进程的区别

一个进程可以有多个线程,线程之间可以共享内存, 而每个进程有自己独立的内存空间.

如何构造线程?

构造器

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

方法1:自定义线程类,重写 run 方法

from threading import Thread


# 自定义线程类
class MyThread(Thread):
    def run(self):
        print('running my task')


# 使用线程
my_task = MyThread()
my_task.start() # 启动线程

方法2:传入一个 run 函数

from threading import Thread


# 自定义 run 函数
def my_run():
    print('running my task')


# 使用线程
my_task = Thread(target=my_run)
my_task.start() # 启动线程

Timer 类

Timer 类是 Thread 的子类,提供延迟启动功能。

from threading import Timer


# 自定义 run 函数
def my_run():
    print('running my task')


# 使用线程
my_task = Timer(3, my_run)
my_task.start() # 3 秒后启动线程

一个简单的例子

from threading import Thread


class MyThread(Thread):
    def run(self):
        for i in range(100):
            print(f'{self.getName()} -- {i}')


t1 = MyThread()
t2 = MyThread()

t1.start()
t2.start()

主线程

Python 解析器会启动主线程,通常主线程会等待子线程结束才退出,除非…(往下看)

import threading


main_thread = threading.current_thread()
print(main_thread.getName())

守护线程(daemon)

守护线程用来为其他线程提供服务, 所以在一般情况下, 它会常驻在内存中而不会结束, 当只剩下守护进程时, 守护进程就终止了, 因为其他线程都结束了, 它还提供服务给谁呢? 我们可以通过 isDaemon 方法来判断一个线程是否是守护线程, 我们也可以通过 setDaemon 方法来设置一个普通线程为一个守护线程, 不过它必须在线程启动之前调用.

from threading import Thread
import time


def my_run():
    i = 1000000
    while i > 0:
        print(i)
        i -= 1


my_task = Thread(target=my_run, daemon=True)
my_task.start()


# 主线程 0.5 秒后退出
time.sleep(0.5)
print('main thread done')

线程相关方法和函数

Thread.start()
Thread.run()
Thread.join()

Thread.ident
threading.get_ident()

Thread.name
Thread.getName()
Thread.setName()

Thread.is_alive()

Thread.daemon
Thread.isDaemon()
Thread.setDaemon()

threading.main_thread()
threading.current_thread()
threading.active_count()
threading.enumerate()
threading.settrace()
threading.setprofile()
threading.setprofile()
threading.stack_size()
time.sleep()

– 更多参见:Python 精萃
– 声 明:转载请注明出处
– Last Updated on 2018-10-06
– Written by ShangBo on 2018-10-06
– End

猜你喜欢

转载自blog.csdn.net/shangboerds/article/details/82954919