并发编程~~~多线程~~~开启线程的两种方式, 线程的其他方法
一 什么是线程
线程是执行程序的最小单位,就像一条流水线工作的过程.
开启一个进程: 在内存中开启一个进程空间,然后将主进程的所有的资源数据复制一份,然后调用线程去执行代码
进程是资源单位,线程是执行单位
二 线程 VS 进程
- 开启进程的开销非常大,比开启线程的开销大很多
- 开启线程的速度非常快,要快几十倍到上百倍
- 线程与线程之间可以共享同一个进程的数据,进程与进程之间需要借助队列等方法实现通信.
- 主线程和子线程没有地位之分(没有主次之分),一个主线程结束后要等其他子线程结束后,才能结束本进程.
三 开启线程的两种方式
from threading import Thread
import time
def task(name):
print(f'{name}is running')
time.sleep(1)
print(f'{name}is gone')
if __name__ == '__main__':
t1 = Thread(target=task,args=('大黑',))
t1.start()
print('主线程')
from threading import Thread
import time
class MyThread(Thread):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
print(f'{self.name}is running')
time.sleep(1)
print(f'{self.name}is gone')
if __name__ == '__main__':
t1 = MyThread('大黑')
t1.start()
print('主进程')
四 线程的其他方法
from threading import Thread,currentThread,enumerate,activeCount
import os,time
def task():
print(currentThread())
time.sleep(1)
print('666')
if __name__ == '__main__':
t1 = Thread(target=task,name='线程1')
t2 = Thread(target=task,name='线程2')
t1.start()
t2.start()
time.sleep(2)
print(t1.isAlive()) # 判断线程是否活着
print(t1.getName()) # 获取线程名
t1.setName('子进程1') # 设置线程名
print(t1.getName())
print(currentThread()) # 获取当前线程的对象
print(enumerate()) # 返回一个列表,包含所有的线程对象
print(activeCount()) # 返回正在运行的线程数量
print(f'主线程{os.getpid()}')