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

yizhihongxing

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之循环结构

    Python之循环结构 循环结构简介 在编程时,循环结构是一种非常实用的结构,可以让计算机重复执行指定的代码。Python语言支持两种循环结构,分别是for循环和while循环。在实际开发中,针对不同的需求,选用不同的循环结构。 Python之for循环 for循环是一种针对“可迭代对象”的循环结构,主要用于遍历一个序列(列表、元组、字符串)或其他可迭代对象…

    python 2023年5月14日
    00
  • 正则表达式量词与贪婪的使用详解

    下面是详细的攻略: 正则表达式量词与贪婪的使用详解 正则表达式是一种用于匹配字符串的模式。在正则表达式中,量词用于指定匹配的次数。本文将介绍正则表达式中的量词及其贪婪的使用。 量词的使用 正则表达式中的量词用于指定匹配的次数。下面是一些常用的量词: *:匹配前一个字符0次或多次。 +:匹配前一个字符1次或多次。 ?:匹配前一个字符0次或1次。 {n}:匹配前…

    python 2023年5月14日
    00
  • python多线程中获取函数返回值的三种方法

    下面就来详细讲解“python多线程中获取函数返回值的三种方法”。 前言 在使用Python多线程处理任务时,我们常常会遇到需要等待线程执行完毕并获取执行结果的情况。但是由于线程之间的并发执行,导致我们在获取结果时无法像单线程一样直接在函数末尾获得返回值。 本文将为大家介绍Python多线程中获取函数返回值的三种方法,分别是: 使用全局变量 使用Queue队…

    python 2023年5月19日
    00
  • 利用Matlab绘制各类特殊图形的实例代码

    利用Matlab可以绘制各类特殊图形,下面将为大家分享绘制这些特殊图形的攻略,包括实例代码。 一、绘制正弦曲线 正弦曲线是一种周期性曲线,它的特点是在一个周期内正负变换。在Matlab中,我们可以通过以下代码来绘制正弦曲线: x = linspace(0, 4*pi, 1000); % 定义x的范围, 从0 持续到 4*pi y = sin(x); %计算对…

    python 2023年5月18日
    00
  • python 实现二叉搜索树的四种方法

    Python 实现二叉搜索树的四种方法 二叉搜索树(Binary Search Tree,简称BST)是一棵二叉树,它具有以下性质: 若左子树不为空,则左子树上所有结点的值均小于它的根节点的值; 若右子树不为空,则右子树上所有结点的值均大于它的根节点的值; 左、右子树分别也为二叉搜索树; 没有键值相等的节点; 因其高效性,在排序、查找等问题中,常常使用二叉搜…

    python 2023年5月13日
    00
  • python 缺失值处理的方法(Imputation)

    Python缺失值处理的方法(Imputation)是数据预处理中的一部分,目的是填补数据中的缺失值,使数据集更完整、更符合实际情况,减少数据分析过程中的误差。本篇文章将为大家详细介绍Python中缺失值处理的方法。具体内容如下: 1. 判断缺失值 在对数据进行处理之前,首先需要判断数据集中存在哪些缺失值。常见的缺失值的表示有NaN、None、NaT等。以下…

    python 2023年5月14日
    00
  • Python常用数据结构和公共方法技巧总结

    Python常用数据结构和公共方法技巧总结 Python是一种高级编程语言,具有丰富的数据结构和公共方法技巧。本文将详细讲解Python常用的数据构和公共方法技巧包括列表、元组、字典、集合等。 列表 列表是Python中最常用的数据构之一,它可以存储任类型的数据,并且支持动态扩展和收缩。下面是一些常用的列表方法: append()方法 append()方法用…

    python 2023年5月13日
    00
  • 在 Python 3.6 中从 CSV 绘制纬度经度

    【问题标题】:Plot latitude longitude from CSV in Python 3.6在 Python 3.6 中从 CSV 绘制纬度经度 【发布时间】:2023-04-03 08:31:01 【问题描述】: 我正在尝试从地图上的CSV 文件中绘制大量经纬度值,格式如下(第一列和第二列): 我正在使用 python 3.6(显然某些库,如…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部