Python Windows系统多进程创建模式及简单应用

本文介绍了Python在Windows系统中使用Multiprocessing模块创建多进程的方法,强调了Windows系统需使用spawn模式,以及通过join()方法进行进程同步的重要性。示例展示了如何创建并管理子进程,以及处理父进程与子进程的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Python Windows系统多进程创建模式及简单应用

`

Python 多进程不受GIL锁的限制,多进程之间可以并行执行。
多进程应用需要调用python标准模块Multiprocessing
通过调用os.getpdi()方法可以查看当前进程的编号

下面示例可以展示多进程的简单创建及传入参数


import multiprocessing
import time
import os


# 子进程的代码
def run_proc(name, sec):
    for _index in range(sec):
        print('{} Process id: {} running seconds: {}'.format(name, os.getpid(), _index))
        time.sleep(1)


if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')
    # windows 系统不支持fork模式,如果使用会报错
    # multiprocessing.set_start_method('fork')
    print('Parent process %s.' % os.getpid())  # 打印当前进程 pid

    # 实例化一个进程,注意传入的参数为一个元组,当只有一个参数时,写成(arg,)
    p1 = multiprocessing.Process(target=run_proc, args=('Child 1', 5))
    p2 = multiprocessing.Process(target=run_proc, args=('Child 2', 20), daemon=True)

    print('Child process will start.')
    p1.start()
    p2.start()
    run_proc("Parent", 5)
    p1.join()  # join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
    print('Child1 exit code {}'.format(p1.exitcode))
    # p2.join()   # 设置p2的进程阻塞,如果不设置则主线程会执行完直接退出,但P2因未执行完而导致报错
    print('Child process end.')
    print('Child1 exit code {}'.format(p1.exitcode))
    print('Child2 exit code {}'.format(p2.exitcode))

输出如果:

Parent process 19020.
Child process will start.
Parent Process id: 19020 running seconds: 0
Child 1 Process id: 17752 running seconds: 0
Child 2 Process id: 17344 running seconds: 0
Parent Process id: 19020 running seconds: 1
Child 1 Process id: 17752 running seconds: 1
Child 2 Process id: 17344 running seconds: 1
Parent Process id: 19020 running seconds: 2
Child 2 Process id: 17344 running seconds: 2
Child 1 Process id: 17752 running seconds: 2

Parent Process id: 19020 running seconds: 3
Child 2 Process id: 17344 running seconds: 3
Child 1 Process id: 17752 running seconds: 3
Parent Process id: 19020 running seconds: 4
Child 2 Process id: 17344 running seconds: 4
Child 1 Process id: 17752 running seconds: 4

Child 2 Process id: 17344 running seconds: 5
Child1 exit code 0
Child process end.
Child1 exit code 0
Child2 exit code None

Process finished with exit code 0


总结

1、注意创建多任务模式在windows系统中只能是spawn模式,也即创建的子进程仅获得主进程必要的资源,但如果主进程退出了子进程可能会报错。
2、如p2进程如果没有p2.join()则主进程直接退出后程序会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值