一、概念
单线程:串行执行,即执行流程在一条线上
多线程:并行执行,即执行流程在多条线上
多任务可以由多进程完成,也可以由一个进程的多个线程完成。
进程由若干个线程组成,一个进程至少包含一个线程。
线程是操作系统直接支持的执行单元,许多高级语言都是内置多线程的支持。python也不例外。
二、python中多线程的库介绍:
thread 和threading两个标准库
thread是低级库;
threading是高级库,对thread进行了封装。绝大多数情况,我们只需要使用threading 这个高级模块
启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行。
举例说明:(在python3.6上执行的,python2要改动地方不多)
#多线程基础
import threading
class A(threading.Thread):
def __int__(self):
#初始化该线程
threading.Thread.__init__(self)
def run(self):
#该线程要执行的任务
for i in range(10):
print ("我是线程A")
class B(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(10):
print ("我是线程B")
#实例化为线A为t1
t1 = A()
#启动线程
t1.start()
#实例化线程B为t2
t2 = B()
#启动线程t2,此时与t1同时执行
t2.start()
输出结果,混合在一起,说明并行执行的,(但是有个奇怪的梗,不全是混合的,无解=_=)
试了廖雪峰给的一个例子:
import time
import threading
#新线程执行的代码:
def loop():
print ("thread %s is running...." % threading.current_thread().name)
n = 0
while n < 5:
n = n+1
print ('thread %s >>> %d'% (threading.current_thread().name,n)) # %(变量1,变量2...)
time.sleep(1)
print ( "thread %s is running..."%threading.current_thread().name)
print ( "thread %s is running..."%threading.current_thread().name)
t = threading.Thread(target = loop,name='LoopThread')
t.start()
t.join()
print ("thread %s ended" %threading.current_thread().name)
输出结果:
任何进程会默认启动一个线程 ,我们把该线程称为主线程,主线程又可以启动新的线程,python的threading模块有个current_thread()函数,它永远返回当前线程的实例。主线程实例的名字叫MainThread,子线程的名字在创建时指定,我们用LoopThread命名子线程。名字仅仅在打印时用来显示,完全没有其他意义,如果不起名字Python就自动给线程命名为Thread-1,Thread-2......