多任务编程-进程:
- 进程是我们计算机(操作系统)分配资源的最小单位,CPU和内存
- 进程里面至少还有一个主线程,主线程是真正处理程序
- 实现多任务的第一种方式 => 同时创建多个进程 => 每个进程处理一个程序,所有程序同时运行
if __name__=='__main__':#会创建一个main主进程
创建进程:
#music_process=multiprocessing.Process(target=任务名)
启动进程:
music_process.start()#启动进程
进程编号:
① 方便程序的管理,每个进程都有一个唯一编号
② 获知进程与进程之间的父子关系
获取进程编号:
import os#用于获取进程相关信息
print('主:',os.getpid())#获取进程编号
print('zhu:',multiprocessing.current_process())#获取进程信息
父进程:
一个进程下创建一个新进程,前者为父进程,后者为子进程
获取父进程编号:
print('主(父进程):',os.getppid())#获取父进程编号
创建进程传参:
music_process=multiprocessing.Process(target=music,args=(5,))#创建不定长元组参数
sing_process=multiprocessing.Process(target=sing,kwargs={'count':5})#创建不定长字典参数
案例:
import multiprocessing
import time
import os
def music(count):
for i in range(count):
print('主(父进程):',os.getppid())#获取父进程编号
print('m:', os.getpid()) # 获取进程编号
print('m:', multiprocessing.current_process()) # 获取进程信息
print('我在听歌')
time.sleep(0.2)
def sing(count):
for i in range(count):
print('s:', os.getpid()) # 获取进程编号
print('s:', multiprocessing.current_process()) # 获取进程信息
print('我在跳舞')
time.sleep(0.2)
if __name__=='__main__':
# s=time.time()
# music()
# sing()
# end=time.time()
# print(end-s)
print('主:',os.getpid())#获取进程编号
print('zhu:',multiprocessing.current_process())#获取进程信息
music_process=multiprocessing.Process(target=music,args=(5,))
sing_process=multiprocessing.Process(target=sing,kwargs={'count':5})
s = time.time()
music_process.start()
sing_process.start()
end = time.time()
print(end - s)
注意事项:
- 进程之间不能共享全局变量
- 主进程会等待所有子进程执行结束再结束
join():
join():主进程等待子进程执行结束,然后再继续执行
import multiprocessing
import time
import os
def musci(count,times):
for i in range(count):
print('唱歌')
time.sleep(times)
print('当前线程的名称:',threading.current_thread().name)#输入当前线程的名称
def sing(count,times):
for i in range(count):
print('跳舞')
time.sleep(times)
print('当前线程的名称:', threading.current_thread().name) # 输入当前线程的名称)
if __name__=='__main__':
print(os.getpid())
print(multiprocessing.current_process())
musci_pass=multiprocessing.Process(target=musci,args=(5,0.2))
sing_pass=multiprocessing.Process(target=sing,kwargs={'count':5,'times':0.2})
streat=time.time()
musci_pass.start()
musci_pass.join()
sing_pass.start()
end=time.time()
print(end-streat)
让子进程提前结束:
- 把子进程设置为守护主进程:music_process.daemon=True
- 直接销毁子进程:music_process.terminate()