– 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