目录
- 多线程
- 1. 什么是多线程?
- 2. 串行模式
- 3. 多线程
- 3.1 多线程方法写法
- 3.2 多线程方法带参数
- 3.3 多线程类写法
- 多进程
- 1. 什么是多进程
欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
多线程
1. 什么是多线程?
不增加CPU数量的情况下同时执行多个线程的任务。
相比较于多进程没有多个CPU之间交换信息的损耗。
2. 串行模式
请注意!计算机中没有真正意义上的同时,只是因为执行多个任务时来回切换执行2个任务,让你觉得是同时。
下面的程序是先执行完 func() 的内容,然后执行main的循环,这是典型的串行工作。
def func():
for i in range(1000):
print("func", i)
if __name__ == '__main__':
func()
for i in range(1000):
print("main", i)
3. 多线程
明显的发现多线程的情况下会出现输出混乱可能我们的fun输出晚fun还没有输出数字,但是main 数字此时已经输出了,造成了下面乱糟糟的情况。
3.1 多线程方法写法
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)
3.2 多线程方法带参数
传递args参数必须是元组;如果采用kwargs参数必须是字典键值对
from threading import Thread
def func(name): # name参数
for i in range(1000):
print(name, i)
if __name__ == '__main__':
t1 = Thread(target=func, kwargs={'name':'T1'}) # 传递参数必须是元组
t1.start()
t2 = Thread(target=func, args=("T2",))
t2.start()
3.3 多线程类写法
如果要传参,需要在类中定义构造函数进行传参。
from threading import Thread # 线程类
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)
多进程
1. 什么是多进程
多个CPU执行任务,不会像多线程一样有实际有效线程数量的限制,理论上CPU越多性能越强大。
多个CPU合作执行,CPU之间的信息交换带来比较大的效率损失。
## 2. 多进程
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)
上面代码你可能会得到一个好像是串行运行的结果,这是因为执行速度太快了,加入延时你会看的更清楚直观
import time
from multiprocessing import Process
def func():
for i in range(5):
print("子进程", i)
time.sleep(1)# 增加延迟,如果不加延迟的话,可能因为多个CPU快速的执行导致,看上去的效果像是串行执行(1整个CPU执行比较快)
if __name__ == '__main__':
p = Process(target=func)
p.start()
for i in range(5):
print("主进程", i)
time.sleep(1)
## 总结 大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2023 mzh
Crated:2023-3-1
欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』