from multiprocessing import Process
deffunc():pass# 开启一个子进程
Process(target=func).start()# 开启多个子进程for i inrange(10):
p = Process(target=func)
p.start()
验证父子进程之间的数据不能共享
from multiprocessing import Process
"""子进程也会开辟自己的内存空间, 将自己的变量存在自己的内存空间中"""
n =100deffunc():global n
n =0if __name__ =='__main__':# 启动子进程, target参数获取执行的函数名, args参数获取函数所需的参数(使用元祖)
Process(target=func).start()print(n)
主进程会等待子进程结束后再结束
from multiprocessing import Process
import time
"""父进程需要等待子进程代码结束后回收子进程占用资源, 所以要等到子进程接收后再结束自己"""deffunc():
time.sleep(10)print('子进程结束')if __name__ =='__main__':
Process(target=func).start()
time.sleep(1)print('父进程结束')
子进程执行异步, 没有顺序
from multiprocessing import Process
"""执行结果顺序随机, 并不按照代码顺序"""deffunc(n):print('>'*n)if __name__ =='__main__':
Process(target=func, args=(1,)).start()
Process(target=func, args=(5,)).start()
Process(target=func, args=(3,)).start()
Process(target=func, args=(2,)).start()
实现子进程阻塞
from multiprocessing import Process
import time
deffunc(n):
time.sleep(1)print('>'* n)if __name__ =='__main__':
l =[]for i inrange(10):
p = Process(target=func, args=(i,))
p.start()
l.append(p)for j in l:
p.join()# 阻塞, 会等待子进程结束后再执行后边的代码print('都结束了')
守护进程
守护进程也是一个子进程
当主进程的**代码**执行完毕之后自动结束的子进程叫做守护进程
from multiprocessing import Process
import time
defdaemon_func():whileTrue:print('守护进程')
time.sleep(0.5)deffunc():for i inrange(5):print('非守护进程')
time.sleep(1)if __name__ =='__main__':
Process(target=func).start()
p = Process(target=daemon_func)
p.daemon =True# 将daemon设置为True, 即守护进程模式
p.start()for i inrange(3):print('主进程')
time.sleep(1)
守护进程报活
from multiprocessing import Process
import time
defdaemon_func():whileTrue:print('守护进程')
time.sleep(0.5)deffunc():for i inrange(5):print('非守护进程')
time.sleep(1)if __name__ =='__main__':
p2 = Process(target=func)
p2.start()
p = Process(target=daemon_func)
p.daemon =True# 将daemon设置为True, 即守护进程模式
p.start()for i inrange(3):print('主进程')
time.sleep(1)
p2.join()