### 线程
进程: 资源分配最小单位
线程: cpu执行程序的最小单位
一个进程必须有一个线程,一个线程可以包含多个线程
##一份进程资源中可以包含多个线程
from threading import Thread ==>引入线程(属于一个类)
from multiprocessing import Process ==>引入进程(属于一个类)
import os
def func(num):print('当前线程{},所归属的进程id号{}'.format(os.getpid(),num))
if __name__=="__main__":for i in range(10):# 异步创建10个子线程t = Thread(target=func,args=(i,))t.start()主线程执行任务print(os.getpid())
## 并发多线程和多进程 , 谁的速度更快? 多线程!
import time
def func(num):print('当前线程{},所归属的进程id号{}'.format(os.getpid(),num))if __name__=='__main__':多线程测试;#记录开始时间starttime=time.time()lst=[]for i in range(1000):t=Thread(target=func,args=(i,))t.start()lst.append(t)# 等到所有子线程执行完毕for i in lst:i.join()# 记录结束时间endtime=time.time()print("多线程执行时间:",endtime-starttime)多进程测试:#记录开始时间starttime=time.time()lst=[]for i in range(1000):p=Process(target=func,args=(i,))p.start()lst.append(p)# 等到所有子线程执行完毕for i in lst:i.join()# 记录结束时间endtime=time.time()print("多进程执行时间:",endtime-starttime)
##多线程 共享同一份进程资源
num =1000
def func():global numnum -=1
if __name__=="__main__":
for i in range(1000):t=Thread(target=func)t.start()print(num)
##用类定义线程
from threading import Thread
import time
import osclass MyThread(Thread): ===>必须继承父类def __init__(self,name): ==>如果传参数,必须调用父类的构造方法# 手动调用父类的构造方法super().__init__() ==>super()只调用父类self.name = namedef run(self): ===>run方法不可以乱写还有(handle)time.sleep(1)print("当前进程正在执行runing ... " , self.name)if __name__ == "__main__":t = MyThread("机器今天会再次爆炸么?")t.start()print("主线程执行结束 ... ")
##线程相关的函数
线程.is_alive() 检测线程是否仍然存在
线程.setName() 设置线程名字
线程.getName() 获取线程名字
1.currentThread().ident 查看线程id号
2.enumerate() 返回目前正在运行的线程列表
3.activeCount() 返回目前正在运行的线程数量例如:
def func():time.sleep(1)
if __name__ == "__main__":t = Thread(target=func)t.start()# print(t , type(t)) ===>对象print(t.is_alive()) # False ==>判断子线程是否还活着print(t.getName()) ==>获取名字t.setName("xboyww") ===>修改子线程名字print(t.getName()) ===>将修改的名字再去获取1.currentThread().ident 查看线程id号
from threading import currentThread ==>需要引入(currentThread这个一个类)
例如:
def func():print("子线程id",currentThread().ident , os.getpid())if __name__ == "__main__":Thread(target=func).start()print("主线程id",currentThread().ident , os.getpid())2.enumerate() 返回目前正在运行的线程列表(死了的线程不展示)
from threading import enumerate
from threading import activeCount # (了解)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!