一、多线程
- 使用多线程需要导入threading模块里的Thread类。
- 创建多线程对象,赋予其需要执行的目标。
- 启动线程。
#导入类
from threading import Thread
def func():
for i in range(500):
print("子线程:", i)
if __name__ == '__main__':
t = Thread(target=func)#创建线程类,目标为func方法
t.start()#开始线程
for i in range(500):
print("主线程:", i)
第二种写法:
from threading import Thread
class MyThread(Thread): #继承Thread类
def run(self): #线程启动后执行的是run()里面的内容
for i in range(100):
print("子线程:", i)
if __name__ == '__main__':
t = MyThread()
t.start()
for i in range(100):
print("主线程:", i)
如果要给函数传参可以这样写:
t = Thread(target=func, args=("传参",))#args里面必须是元组
二、多进程
- 使用多进程需要导入multiprocessing模块里的Process类。
- 创建多进程对象,赋予其需要执行的目标。
- 启动线程。
from multiprocessing import Process
def func():
for i in range(100):
print("子进程:",i)
if __name__ == '__main__':
p = Process(target=func)
p.start()
for i in range(100):
print("主进程:",i)
三、线程池
线程池:一次性开辟一些线程。用户直接把提交抛给线程池,线程任务的调度交给线程池来完成。
- 使用多进程需要导入concurrent.futures里的ThreadPoolExecutor和ProcessPoolExecutor类。
- 创建线程池,并设置线程数。
- 提交任务。
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def func(name):
for i in range(500):
print(name,i)
if __name__ == '__main__':
#创建线程池,添加50个线程
with ThreadPoolExecutor(50) as t:
for i in range(100):
t.submit(func, name = "子线程") #提交任务,设置参数
#等待线程池中的任务全部执行完毕,才继续执行线程池外的内容
print("done!")