想要实现多任务,python提供了一个multiprocessing库下的 Process类
创建一个 Process 对象:
Process([group [, target= [, args=, [, kw
group:分组,实际上不使用
target:表示调用的对象,可以传入函数名称
args:表示给调用对象以元组的形式提供参数。比如target的函数为a,a函数有两个形参,
那么args就为 args=(x,y)
kwargs:表示调用对象的字典
Process类代表一个进程对象
创建一个 Process 对象:
Process([group [, target= [, args=, [, kw
group:分组,实际上不使用
target:表示调用的对象,可以传入函数名称
args:表示给调用对象以元组的形式提供参数。比如target的函数为a,a函数有两个形参,
那么args就为 args=(x,y)
kwargs:表示调用对象的字典
name:别名,相当于给这个进程取一个名字
from multiprocessing import Process
import os
import time
def run(str):
while True:
print('1--%s %s' % (os.getpid(), os.getppid()))
print('我是run内容')
time.sleep(2)
if __name__ == '__main__':
print('2--%s' % os.getpid())
# 创建子进程
p = Process(target=run, args=('good',))
# 启动程序
p.start()
while True:
print('我是main的内容')
time.sleep(1)
进程池的简单描述:
from multiprocessing import Pool
import os
import time
def run(i):
print('子进程 %d 启动, %s' % (i, os.getpid()))
t1 = time.time()
time.sleep(i)
t2 = time.time()
print('子进程 %d 结束, %s %.2f ' % (i, os.getpid()))
if __name__ == '__main__':
print('父进程开始')
# 创建多个进程 进程池
# 创建进程池
# Pool(2)里面的参数表示可以同时执行的进程数量
p = Pool(3)
# 将函数作为子进程添加到进程池中
# p.apply_async()
for i in range(3):
# 将函数作为子进程添加到进程池中
p.apply_async(func=run, args=(i+1,))
# 第一个子进程 1 2 3
# 在调用join()之前必须先调用close(),调用close()之后就不能再添加新的进程
p.close()
# 进程池调用join(),父进程会等待进程池中所有的子进程结束后,再继续执行父进程
p.join()
print('父进程结束')