threading多线程

什么是线程?

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个进程中可以包含多个线程。

 1 import threading
 2 import time
 3 begin = time.time()
 4 def f1(a,b):
 5     print("f1",a,b)
 6     time.sleep(2)
 7 def f2(a,b,c):
 8     print("f2",a,b,c)
 9     time.sleep(3)
10 t1 = threading.Thread(target=f1,args=(1,1))
11 t2 = threading.Thread(target=f2,args=(2,2,2))
12 t1.start()
13 t2.start()
14 end = time.time()
15 print(end-begin)

用过上述的代码实现了三条(加上主线程)线程的“并行”。

线程的创建

  t1 = threading.Thread(target=f1,args=(1,1)) 其中target是目标函数,无括号。args传入变量。

  t1.start()表示激活这个线程。

.join 和 setdeamon

  t1.join必须在start之后加入,表示主线程必须等待该子线程运行完之后再结束。

  t1.setDaemon(True) 必须在start之前加入。表示主线程不在等待此子线程而结束。但是必须等待其他子线程结束。

其他内容

  线程之间数据相互影响,但是进程之间完全独立。

  由于cpython解释器存在的global interpreter lock使得每个进程一次只能解释一个线程。所以Python没有实现真正意义上的并行(多核处理同时多个线程)。

  线程分为IO密集型和计算密集型。由于GIL的存在Python在处理多个计算密集型线程时比不用多线程用时更长。(抢夺CPU资源)在3.5优化后好很多。

  解决办法:1.多个进程(会复制一个主进程内存爆炸)2.协程等。3.其他语言。

原文地址:https://www.cnblogs.com/khal-Cgg/p/5920184.html