线程理论详见
https://www.cnblogs.com/linhaifeng/articles/7430082.html
1、每个进程内都会有一个默认的线程
2、多线程指得是一个进程里有多个线程
3、线程的最大两个特点:
开启线程开销小;
同一个进程内的多个线程共享数据;
- 开启线程的两种方式
开线程的目的:并发执行任务
没有子线程的概念,在一个进程中的多个线程地位是平等的
法一:
import time
import random
from threading import Thread
def task(name):
print('%s is runing' %name)
time.sleep(random.randint(1,3))
print('%s is end' %name)
if __name__=='__main__':
t1=Thread(target=task,args=('alex',))
t1.start()
print('主进程')
结果:
alex is runing
主进程
alex is end
法二:自己写一个类
import time
import random
from threading import Thread
class Mythread(Thread):
def run(self):
print('%s is runing' %self.name)
time.sleep(random.randint(1,3))
print('%s is end' %self.name)
if __name__=='__main__':
t1=Mythread()
t1.name='clt' #如果没有init名字的话 可以采取这种方法
t1.start()
print('主进程')
结果:
clt is runing
主进程
clt is end
- 进程与线程的区别
进程之间内存隔离,线程共享数据空间
1、
from threading import Thread
#import os
n=100
def task():
global n
n=0
if __name__=='__main__':`在这里插入代码片`
t1=Thread(target=task,)
t2=Thread(target=task,)
t3=Thread(target=task,)
t1.start()
t2.start()
t3.start()
print('主进程',n) #此时n=0,在进程中n=100
结果:
主进程 0
2、
import time
import random
from threading import Thread
import os
def task():
print('%s is runing' %os.getpid())
time.sleep(random.randint(1,3))
print('%s is end' %os.getpid())
if __name__=='__main__':
t1=Thread(target=task,)
t2=Thread(target=task,)
t3=Thread(target=task,)
t1.start()
t2.start()
t3.start()
print('主进程')
结果:
14560 is runing
14560 is runing
14560 is runing
主进程
14560 is end
14560 is end
14560 is end