多任务:就是同时干多个事
单核CPU 如何执行多任务?
其实就是轮流执行。。。
在程序里面,如何完成多任务呢?就是进程、线程
先讲进程
就是正在运行的代码
如何创建进程,使用模块 multiprocessing
代码示例: 不带参数的
from multiprocessing import Process #导入模块
def run_test(): # 因为这里没有参数,所以后面Process()里不用加args和kwargs
print('。。。test.....')
if __name__=='__main__': # 当模块是被导入时,代码块不被运行。
# 当模块是被直接运行时,以下的代码运行。
print('主进程执行')
p=Process( target=run_test ) # 创建子进程, target接收执行的任务
p.start() #调用子进程
代码示例: 传递参数的子进程
from multiprocessing import Process #导入模块
from time import sleep #导入模块
def run_test(name,age,**kwargs): #定义任务的函数,参数name,age,还有字典**kwargs
print('子进程正在运行 name的值:%s ,age的值:%d'%(name,age))
print('字典kwargs:',kwargs)
if __name__=='__main__':
print('主进程开始执行')
# p=Process(target=run_test,args=('test',),kwargs={'key':12})
p=Process(target=run_test,args=('test',23),kwargs={'key':12}) #创建子进程
# 元组里是一个元素,要加上逗号,
p.start() #调用子进程
以上,学习了如何创建子进程,传递参数,如何调用。
几个常用方法:
join() 方法,等子进程结束后
示例代码:
from multiprocessing import Process
from time import sleep
def worker(interval):
print('work start')
sleep(interval)
print('work end')
if __name__=='__main__':
print('主进程正在执行')
p=Process(target=worker,args=(5,)) #创建子进程
p.start() #调用子进程
#希望下面的输出语句,再子进程执行完才输出
# sleep(4)
p.join() #调用join方法 :主进程等待调用join的子进程结束
print('主进程执行完')
join()方法中timeout使用
from multiprocessing import Process
from time import sleep
def worker(interval):
print('work start')
sleep(interval)
print('work end')
if __name__=='__main__':
print('主进程正在执行')
p=Process(target=worker,args=(5,))
p.start()
p.join(3) # 子进程休眠5秒,而我只等你3秒,3秒后主进程代码就要执行
print('主进程执行完')
Process中两个重要属性, name 和 pid,就是名字和进程id
import multiprocessing
import time
def colck(interval): #定义执行任务的函数
for i in range(3):
print('当前时间:{}'.format(time.ctime()))
time.sleep(interval) # 休眠时间为传递的数
if __name__=='__main__':
p=multiprocessing.Process(target=colck,args=(1,)) #创建子进程
#这么导入 from multiprocessing import Process,就可以省略multiprocessing了, p=Process(target=colck,args=(1,))
p.start()
p.join()
print('p.pid:',p.pid)
print('p.name:',p.name)
print('p.is_alive:',p.is_alive())
创建多个进程。示例代码如下
from multiprocessing import Process
from time import sleep
def work1(interval):
print('执行work1')
sleep(interval)
print('end work1')
def work2(interval):
print('执行work2')
sleep(interval)
print('end work2')
def work3(interval):
print('执行work3')
sleep(interval)
print('end work3')
if __name__=='__main__':
print('执行主进程')
p1=Process(target=work1,args=(4,))
p2=Process(target=work2,args=(2,))
p3=Process(target=work3,args=(3,))
#调用子进程
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
print('p1.name:',p1.name)
print('p2.name:',p2.name)
print('p3.name:',p3.name)
print('主进程执行完')
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。