加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

并发编程-多进程

发布时间: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设置为守护进程,只要主进程结束(严格来说应该是主进程中的任务执行完,而非主进程结束),守护进程也跟着结束

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读