python中实现多线程⾮常简单. 借助Thread类来完成.
# 线程, 进程 # 进程是资源单位, 每一个进程至少要有一个线程 # 线程是执行单位 # 启动每一个程序默认都会有一个主线程 # def func(): # for i in range(1000): # print("func", i) # # # if __name__ == '__main__': # func() # for i in range(1000): # print("main", i) # 多线程 from threading import Thread # 线程类 # def func(): # for i in range(1000): # print("func", i) # # # if __name__ == '__main__': # t = Thread(target=func) # 创建线程并给线程安排任务 # t.start() # 多线程状态为可以开始工作状态, 具体的执行时间由CPU决定 # # for i in range(1000): # print("main", i) class MyThread(Thread): # def run(self): # 固定的 -> 当线程被执行的时候, 被执行的就是run() for i in range(1000): print("子线程", i) if __name__ == '__main__': t = MyThread() # t.run() # 方法的调用了. -> 单线程???? t.start() # 开启线程 for i in range(1000): print("主线程", i)
多进程:
from multiprocessing import Process from threading import Thread # def func(): # for i in range(1000): # print("子进程", i) # # # if __name__ == '__main__': # p = Process(target=func) # p.start() # for i in range(1000): # print("主进程", i) def func(name): # ?? for i in range(1000): print(name, i) if __name__ == '__main__': t1 = Thread(target=func, args=("周杰伦",)) # 传递参数必须是元组 t1.start() t2 = Thread(target=func, args=("王力宏",)) t2.start()
线程池(很快,就是爬到的东西没有按顺序来):
# 线程池: 一次性开辟一些线程. 我们用户直接给线程池子提交任务. 线程任务的调度交给线程池来完成 from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def fn(name): for i in range(1000): print(name, i) if __name__ == '__main__': # 创建线程池 with ThreadPoolExecutor(50) as t: for i in range(100): t.submit(fn, name=f"线程{i}") # 等待线程池中的任务全部执行完毕. 才继续执行(守护) print("123")