并发编程-多进程
发布时间:2021-01-08 02:28:32 所属栏目:站长百科 来源:网络整理
导读:一.进程 新进程的创建都是由一个 已经存在的进程 执行了一个 用于创建进程的系统调用 而创建的。 1.在UNIX中:fork会创建一个与父进程一摸一样的副本 2.在Windows:系统调用CreateProcess创建进程 进程的状态 程序遇到IO操作(Input、output),会阻塞,IO完成
join就是阻塞,只有join执行完,才会执行join下面的主进程代码 from multiprocessing import Process import time def task1(name): print(f"{name} is running") time.sleep(1) print(f"{name} is gone") def task2(name): print(f"{name} is running") time.sleep(2) print(f"{name} is gone") def task3(name): print(f"{name} is running") time.sleep(3) print(f"{name} is gone") if __name__ == ‘__main__‘: start_time = time.time() p1 = Process(target=task1,args=("alex",)) p2 = Process(target=task2,args=(‘egon‘,)) p3 = Process(target=task3,args=(‘meet‘,)) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join() print(time.time() - start_time) 打印结果 alex is running egon is running meet is running alex is gone egon is gone meet is gone 3.101801872253418 #我们看到,只执行了3s左右,因为p1.start(),p2.start(),p3.start()三个相当于并发执行,p1.join()执行的过程中p2,p3也会执行,其实就是并发。示例1 from multiprocessing import Process import time def task1(name): print(f"{name} is running") time.sleep(1) print(f"{name} is gone") def task2(name): print(f"{name} is running") time.sleep(2) print(f"{name} is gone") def task3(name): print(f"{name} is running") time.sleep(3) print(f"{name} is gone") if __name__ == ‘__main__‘: start_time = time.time() p1 = Process(target=task1,)) p1.start() p2.start() p3.start() p1.join() print("p1") p2.join() print("p2") p3.join() print("p3") print(time.time() - start_time) 打印结果: alex is running egon is running meet is running alex is gone p1 #1s执行打印p1 egon is gone p2 #第2s执行打印p2,因为p2已经执行了1s meet is gone p3 3.1154708862304688示例2 from multiprocessing import Process import time,random def task(): print("task begin") time.sleep(random.randint(1,2)) print("task end") if __name__ == ‘__main__‘: start_time = time.time() for i in range(3): p = Process(target=task) p.start() p.join() print("__main__") print(time.time() - start_time) # 上述例子为串行,每start()一次,就join一次,我们都知道,有join会等到join完成后再执行下面的代码。正确例子如下: from multiprocessing import Process import time,2)) print("task end") if __name__ == ‘__main__‘: start_time = time.time() lst = [] for i in range(3): p = Process(target=task) lst.append(p) p.start() for j in lst: j.join() print("__main__") print(time.time() - start_time)经典示例 五.进程的其他参数from multiprocessing import Process import time def task(name): print(f‘{name} is running‘) time.sleep(2) print(f‘{name} is gone‘) if __name__ == ‘__main__‘: # 在windows环境下,开启进程必须在 __name__ == ‘__main__‘ 下面 # p = Process(target=task,args=(‘常鑫‘,)) # 创建一个进程对象 p = Process(target=task,),name=‘alex‘) # 创建一个进程对象 p.start() time.sleep(1) p.terminate() # 杀死子进程(可以理解为发送信号,需要时间) *** p.join() # *** time.sleep(0.5) print(p.is_alive()) # 查看进程是否存活*** print(p.name) # 默认属性 p.name = ‘sb‘ print(p.name) print(‘==主开始‘)进程的其他参数 六.僵尸进程和孤儿进程基于UNIX环境(linux,macOs) 二.守护进程p.daemon = True,将子进程p设置为守护进程,只要主进程结束(严格来说应该是主进程中的任务执行完,而非主进程结束),守护进程也跟着结束 (编辑:厦门网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |