Python实现多线程和多进程

基本使用方法

第一种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
# 线程,进程
# 进程是资源单位, 每个进程至少有一个线程
# 线程是执行单位
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)

首先导入Thread类

创建Thread对象t

t.start()

相当于开辟一个新的流水线,然后告诉员工可以开始干活了,但是员工什么时候干活得看CPU的安排

第二种方法

1
2
3
4
5
6
7
8
9
10
11
class  MyThread(Thread):
def run(self):
for i in range(1000):
print("子线程", i)

if __name__ == '__main__':
t = MyThread()
# t.run() # 调用这个方法实际上还是单线程,这个只是类的方法调用,不是开辟线程
t.start() # 调用多线程
for i in range(1000):
print("主线程", i)

定义一个类,继承Thread类,然后重写run方法

不能直接调用run方法,通过调用start方法来实现多线程

给线程传递参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 线程,进程
# 进程是资源单位, 每个进程至少有一个线程
# 线程是执行单位
from threading import Thread
def func(name):
for i in range(1000):
print(name, i)

if __name__ == '__main__':
t1 = Thread(target=func, args=("周杰伦",)) # 创建线程并给线程安排任务
t1.start() # 多线程状态为开始工作状态,具体的执行时间由CPU决定
t2 = Thread(target=func, args=("王力宏",)) # 创建线程并给线程安排任务
t2.start() # 多线程状态为开始工作状态,具体的执行时间由CPU决定

使用 args = () 传递参数,args 必须是一个元组,不能是一个字符串,所以“周杰伦”后面要加个逗号

使用多进程的例子

1
2
3
4
5
6
7
8
9
10
11
from multiprocessing import Process

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)

尽管开辟线程和进程有很大的不同,但是在使用的时候非常相似。