进程

from multiprocessing import Process
import time
def son_process():
    print("son start")
    time.sleep(0.1)
    print("son end")
if __name__ == "__main__":
    p = Process(target = son_process)
    p.start()                  #开启子进程,只是通知操作系统,并不意味着子进程开始了
    for i in range(5):
        print("主进程")
        time.sleep(0.1)
#并发:上面的主进程和子进程同时进行
  p1 = Process(target = son_process)
    p1.start()
    p2 = Process(target = son_process)
    p2.start()
    p3 = Process(target = son_process)    
    p3.start()                     #方法1.开启多个子进程
    for i in range(3):                 #方法2:开启多个子进程
        p = Process(target=son_process)
        p.start()
from multiprocessing import Process
import time
def son_process(i):               #传参  
    print("son start",i)
    time.sleep(1)
    print("son end",i)
if __name__ == "__main__":
    for i in range(10):                    #给 参数赋值
        p = Process(target = son_process,args = (i,))
        time.sleep(1)
        p.start()
from multiprocessing import Process
import time
def son_process(i):               #传参
    print("son start",i)
    time.sleep(1)
    print("son end",i)
if __name__ == "__main__":
    for i in range(10):
        p = Process(target=son_process,args=(i,))
        p.start()
    print("主进程的代码执行完毕")       
#主进程与子进程关系:主进程等待子进程结束之后才结束
#原因: 父进程负责创建子进程,也负责回收子进程的资源
             
主进程的代码执行完毕
son start 3
son start 0
son start 5
son start 7
son start 2
son start 1
son start 4
son start 6
son start 8
son start 9
son end 3
son end 0
son end 5
son end 7
son end 2
son end 1
son end 4
son end 6
son end 8
son end 9     #子进程结束 程序结束

Process finished with exit code 0
from multiprocessing import Process
import time
def son_process(i):
    while True:                  #子进程无限循环
        print('son start',i)   
        time.sleep(0.5)
        print('son end',i)

if __name__ == '__main__':
    p = Process(target=son_process, args=(1,))
    p.start()           # 开启一个子进程,异步的
    print('主进程的代码执行完毕')
    print(p.is_alive())  # 子进程还活着
    p.terminate()        # 结束一个子进程,异步的
    print(p.is_alive())  # 子进程还在活着
    time.sleep(0.01)
    print(p.is_alive())     #关闭子进程需要时间,尽管这个时间非常短

主进程的代码执行完毕
True
True
False

Process finished with exit code 0
# 数据隔离
from multiprocessing import Process
n = 100
def sub_n():
    global n              # 子进程对于主进程中的全局变量的修改是不生效的
    n -= 1
    print("子进程:", n)
if __name__ == "__main__":
    p = Process(target = sub_n)
    p.start()
    p.join()                 # 阻塞 直到子进程p结束,主程序才开始进行  两者数据互不干扰
    print("主进程: ",n)



子进程: 99
主进程:  100

Process finished with exit code 0
#开启十个子进程,他们执行完之后结束主进程???
#思路   for循环
# if __name__ == '__main__':
#     p_lst = []
#     for i in range(10):
#         p = Process(target = sub_n)
#         p.start()
#p.join()        #此代码为错误阻塞,因为p为最后一个子进程,只阻塞了最后一个子进程。  错误原因:对for循环理解不够深
#         p_lst.append(p)        #把每一个循环的子进程放在列表里
#     for p in p_lst:p.join()  # 循环这10个子进程   通过阻塞 只有一个条件是能够让我继续执行 这个条件就是子进程结束
#     print('主进程n : ',n)
join 扩展 
      #p.join(timeout = 5)     # 如果不设置超时时间 join会阻塞直到子进程p结束
#     # timeout超时
#     # 如果设置的超时时间,那么意味着如果不足5s子进程结束了,程序结束阻塞
#     # 如果超过5s还没有结束,那么也结束阻塞
#     print('主进程n : ',n)
#     p.terminate()  # 也可以强制结束一个子进程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值