python中的多进程的创建与启动方式

Python中实现多进程主要有两种方式:使用multiprocessing模块和使用os模块。下面我详细讲解这两种方式的创建与启动过程以及示例。

使用multiprocessing模块

multiprocessing模块是Python标准库中提供的多进程模块,它可以创建子进程并且提供类似线程的API。

1. 创建进程对象

要创建一个进程,需要先引入multiprocessing模块,然后创建一个进程对象。进程对象可接受函数作为参数,这个函数就是子进程要执行的任务。

import multiprocessing

def func():
    print('sub process')

if __name__ == '__main__':
    p = multiprocessing.Process(target=func)

上面代码中,函数func()将会在子进程中执行。创建进程对象时需要指定进程执行的任务,通过target参数来指定任务函数。

2. 启动进程

进程对象创建完成后,需要通过调用start()方法启动进程。

import multiprocessing

def func():
    print('sub process')

if __name__ == '__main__':
    p = multiprocessing.Process(target=func)
    p.start()

3. 阻塞等待进程结束

创建并启动进程后,主进程可通过调用进程对象的join()方法来等待子进程结束后再继续执行。

import multiprocessing

def func():
    print('sub process')

if __name__ == '__main__':
    p = multiprocessing.Process(target=func)
    p.start()
    p.join()

上面代码中,使用join()方法可以阻塞主进程,直到子进程执行完毕为止。

示例

import multiprocessing
import os

def func(name):
    print(f'child process {os.getpid()} with arg {name}')

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=func, args=('Alice',))
    p2 = multiprocessing.Process(target=func, args=('Bob',))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

执行结果:

child process 12345 with arg Alice
child process 12346 with arg Bob

上述代码创建了两个进程对象,分别通过args参数传入了不同的参数,在启动后分别输出了结果,最后通过join()方法等待子进程执行完成。

使用os模块

除了使用multiprocessing模块外,还可以使用os模块提供的fork()函数来创建子进程。

1. 创建进程

创建进程使用os中的fork()函数,它可以复制出一个子进程。

import os

if __name__ == '__main__':
    pid = os.fork()

2. 判断进程身份

由于fork()函数产生了一个父进程和一个子进程,因此需要在代码中判断进程身份,决定进程要做的工作。父进程会得到子进程的pid,子进程的pid为0。

import os

if __name__ == '__main__':
    pid = os.fork()
    if pid > 0:
        print(f'parent process with pid {os.getpid()}')
    else:
        print(f'child process with pid {os.getpid()}')

示例

import os

if __name__ == '__main__':
    pid = os.fork()
    if pid > 0:
        print(f'parent process with pid {os.getpid()}')
    else:
        print(f'child process with pid {os.getpid()}')

执行结果:

parent process with pid 12345
child process with pid 12346

上述代码创建了一个子进程,输出了父进程和子进程的pid。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的多进程的创建与启动方式 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python 多线程对post请求服务器测试并发的方法

    在Python中,我们可以使用多线程来测试POST请求服务器的并发性能。多线程可以同时发送多个POST请求,以便模拟多个用户同时访问服务器的情况。本文将通过实例讲解如何使用Python多线程测试POST请求服务器的并发性能,包括使用threading库和两个示例。 使用threading库测试POST请求服务器的并发性能 我们可以使用threading库来测…

    python 2023年5月15日
    00
  • python事件驱动event实现详解

    Python事件驱动event实现详解 事件驱动编程是一种流程控制方式,其核心思想是通过事件去触发相关的动作。在Python中,常用的事件驱动处理模块有:event、asyncio等,而在本篇文章中我们将介绍如何使用event模块来实现事件驱动编程。 event模块简介 Python的event是一个轻量级的事件处理模块,它主要用于线程之间的同步通信。它支持…

    python 2023年6月5日
    00
  • Python正则表达式基本原理

    Python正则表达式基本原理 正则表达式是一种用于描述字符串模式的语言,它可以用于匹配、查找、替换和割字符串。Python中的re模块提供正则表达式的支持,方便进行字符串的处理。本文将详细讲解Python正则表达式的基本原理,包正则表达式法、re块的常用函数以及两个常用的匹配实例。 正则表达式语法 正则表达式由一些特殊字符和普通字符组成,用于字符串模式。下…

    python 2023年5月14日
    00
  • 如何使用Python实现数据库中数据的批量删除?

    以下是使用Python实现数据库中数据的批量删除的完整攻略。 数据库中数据的批量删除简介 在数据库中,批量删除是一次性删除多条记录。在Python中,可以使用pymysql连接MySQL数据库,并使用DELETE语句实现批量删除。 步骤1:连接数据库 在Python中,可以使用pymysql连接MySQL数据库。以下是连接到MySQL的基本语法: impor…

    python 2023年5月12日
    00
  • Python中使用不同编码读写txt文件详解

    当我们读写文件时,需要注意文件的编码格式。在Python中,常见的编码格式有utf-8、gbk等。如果文件的编码格式和Python默认编码格式不一致,很容易出现乱码等问题。 因此,在读写文件时,我们需要指定文件的编码格式。接下来,我将详细讲解Python中使用不同编码读写txt文件的攻略。 读取txt文件 使用默认编码读取txt文件 在Python中,我们可…

    python 2023年5月31日
    00
  • Python生成不重复随机值的方法

    生成不重复随机值的方法可以通过Python中的random模块中的sample函数来实现。sample函数可以从给定的序列中随机选择一定数量的元素,并返回结果列表。具体实现如下所示: import random # 生成随机数组 data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 选择需要的随机数数量 num = 5 # 生成不…

    python 2023年6月3日
    00
  • python支持断点续传的多线程下载示例

    下面是对于“python支持断点续传的多线程下载示例”的完整攻略: 背景介绍 在进行大文件下载时,常常需要使用多线程进行下载加速,但是在下载过程中,如果意外终止了下载,那么就需要重新下载。这时候,我们可以使用断点续传的功能,可以在下载被中断后从上次下载的位置继续进行下载。 示例1:使用urllib库实现断点续传 import urllib.request i…

    python 2023年5月19日
    00
  • Python 不可变对象

    Python中所有的变量都可以被改变,但是有些变量不可以被改变,这些变量就是不可变对象。当尝试对不可变对象进行修改时,会创建一个新对象。下面是Python中常见的不可变对象有: 数字类型(int、float、bool、complex) 字符串类型(str) 元组类型(tuple) frozenset类型 数字类型 数字类型包括整数型、浮点型、布尔型和复数型。…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部