标签:roc 声明变量 run 一起学 函数 操作 app time 对比
线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位,代码/数据/文件是共享的。
就好像看作一个进程中还有多个线程执行任务,简单点来说就是一个程序运行中有多个线程在执行。
1、函数中多线程:
# 初识多线程:threading from threading import Thread import time def func(i): time.sleep(2) print(i) if __name__ == ‘__main__‘: for i in range(5): thread=Thread(target=func,args=(i,)) thread.start()
2、类中多线程:
# 2、类中多线程 from threading import Thread import time class MyTread(Thread): def __init__(self,i): super().__init__() self.i=i def run(self): # 必须有run方法 time.sleep(1) print(self.i) for i in range(10): t=MyTread(i) t.start()
线程pid是一样的:
3、代码/数据/文件是共享的:
但变量计算中会可能会同时拿到变量导致数据不安全,但可以加锁(GIL锁)
实例:
# 3、代码/数据/文件是共享的实例 from threading import Thread import time num=10 # 定义一个全局变量 class MyTread(Thread): def __init__(self,i): super().__init__() self.i=i def run(self): # 必须有run方法 global num # global声明变量 time.sleep(1) print(‘线程:‘,self.i+num) # i+num for i in range(10): t=MyTread(i) t.start()
4、多线程与多进程效率对比,同是100个。
明显多线程更胜一筹,毋庸置疑。
# 4、多线程与多进程效率对比,同是100个。 from threading import Thread import time from multiprocessing import Process def func(i): return i+i if __name__ == ‘__main__‘: start=time.time() t_lst=[] for i in range(100): t=Thread(target=func,args=(i,)) # 多线程 t.start() t_lst.append(t) for i in t_lst:i.join() t1=time.time()-start print(‘多线程执行时间:‘,t1) start=time.time() p_lst=[] for i in range(100): p=Process(target=func,args=(i,)) # 多进程 p.start() t_lst.append(p) for i in p_lst:i.join() t2=time.time()-start print(‘多进程执行时间:‘,t2)
1、threading模块其它方法:
# threading模块其它方法 import threading,time def func(i): time.sleep(0.5) print(i,threading.current_thread()) # 查看线程名字与id print(i,threading.get_ident()) # 查看线程id for i in range(5): threading.Thread(target=func,args=(i,)).start() print(threading.active_count()) # 查看活跃线程数(注意要加上主线程) print(threading.enumerate()) # 查看线程所有项 print(threading.current_thread()) # 查看线程名字与id
小结:
欢迎来大家QQ交流群一起学习:482713805
标签:roc 声明变量 run 一起学 函数 操作 app time 对比
原文地址:https://www.cnblogs.com/gsxl/p/12591067.html