Python语法学习之进程的创建与常用方法详解

Python语法学习之进程的创建与常用方法详解

1. 前言

进程是操作系统进行任务调度的基本单位。在多任务环境下,同时执行多个进程可以提高运行效率。Python中通过multiprocessing模块来创建和管理进程。

本篇攻略将详细讲解如何在Python中创建进程以及常见的进程操作方法。

2. 进程的创建

Python中可以通过multiprocessing模块来创建进程。在multiprocessing模块中,可以使用Process类来创建进程。

import multiprocessing

def func():
    print('This is a child process.')

if __name__ == '__main__':
    p = multiprocessing.Process(target=func)
    p.start()
    p.join()
    print('This is the main process.')

代码说明:

  1. 在代码中先导入了multiprocessing模块。
  2. 定义了一个名为func的函数作为子进程要执行的任务。
  3. 判断当前代码块是否在主模块中运行,以确保子进程在启动时不会重复运行。
  4. 创建一个名为pProcess对象,指定子进程要执行的任务为func
  5. 启动子进程。
  6. 让主进程等待子进程执行完毕。
  7. 打印出一条提示信息,说明主进程在子进程执行完毕后继续执行。

3. 进程的常用方法

3.1 进程的启动和终止

  • start():启动进程。
  • join([timeout]):等待进程执行结束,如果设置了timeout参数,则等待指定时间后结束等待。
  • terminate():强制终止进程。
import multiprocessing
import time

class MyProcess(multiprocessing.Process):
    def run(self):
        for i in range(5):
            print('{} - This is a child process.'.format(i))
            time.sleep(1)

if __name__ == '__main__':
    p = MyProcess()
    p.start()
    p.join(3)
    if p.is_alive():
        p.terminate()
        print('The child process has been terminated.')

代码说明:

  1. 自定义一个名为MyProcess的进程类,继承自Process类。在其run()方法中定义子进程要执行的任务。
  2. 创建一个名为pMyProcess对象。
  3. 启动子进程。
  4. 让主进程等待子进程执行3秒钟后,检查子进程是否仍在运行。如果子进程仍在运行,说明已经超时,主进程将强制终止子进程,并打印出终止信息。

3.2 进程的属性和操作

  • name:进程的名称。
  • pid:进程的ID。
  • is_alive():判断进程是否正在运行。
  • daemon:进程的守护进程状态,可读写。
  • authkey:进程的身份验证键,可读写。
  • exitcode:进程的退出状态码,可读写。
import multiprocessing
import time

def func():
    print('This is a child process.')
    time.sleep(2)

if __name__ == '__main__':
    p = multiprocessing.Process(target=func, name='myprocess')
    p.daemon = True
    p.authkey = b'123'
    p.start()
    time.sleep(1)
    print('name:', p.name)
    print('pid:', p.pid)
    print('is_alive:', p.is_alive())
    print('exitcode:', p.exitcode)

代码说明:

  1. 定义一个名为func的函数作为子进程要执行的任务。
  2. 创建一个名为pProcess对象,指定子进程要执行的任务为func,同时设置进程的名称、守护进程状态和身份验证键。
  3. 启动子进程。
  4. 让主进程等待1秒钟,等待子进程运行。
  5. 分别输出子进程的名称、ID、运行状态和退出状态码。

4. 示例说明

4.1 进程池

在并发编程中,进程池的概念比较常见,可以通过进程池来更好地管理进程。

import multiprocessing
import time

def func(num):
    print('Process {} is running.'.format(num))
    time.sleep(2)
    print('Process {} is done.'.format(num))
    return num

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    result = []
    for i in range(5):
        result.append(pool.apply_async(func, (i,)))
    pool.close()
    pool.join()
    for res in result:
        print('Result:', res.get())

代码说明:

  1. 定义一个名为func的函数作为进程池中子进程要执行的任务。
  2. 创建一个进程池,设置进程池中最多同时执行3个子进程。
  3. 创建一个空列表result,用于存放每个子进程执行完毕后的结果。
  4. 循环5次,将每个子进程加入进程池中,执行func函数,参数为当前循环次数i
  5. 关闭进程池。
  6. 等待所有子进程执行完毕。
  7. 循环输出每个子进程的执行结果。

4.2 多进程抓取网页

import multiprocessing
import requests

def fetch(url):
    response = requests.get(url)
    return response.content

if __name__ == '__main__':
    urls = ['https://www.baidu.com', 'https://www.taobao.com', 'https://www.tencent.com']
    pool = multiprocessing.Pool(processes=3)
    result = []
    for url in urls:
        result.append(pool.apply_async(fetch, (url,)))
    pool.close()
    pool.join()
    for res in result:
        print('Length:', len(res.get()))

代码说明:

  1. 定义一个名为fetch的函数用于抓取网页,参数为网页地址。
  2. 在主函数中定义要抓取的网页地址列表urls
  3. 创建一个进程池,设置进程池中最多同时执行3个子进程。
  4. 创建一个空列表result,用于存放每个子进程抓取网页的结果。
  5. 循环遍历每个网页地址,将每个子进程加入进程池中,执行fetch函数,参数为当前遍历到的网页地址。
  6. 关闭进程池。
  7. 等待所有子进程执行完毕。
  8. 循环输出每个子进程抓取网页的结果的长度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python语法学习之进程的创建与常用方法详解 - Python技术站

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

相关文章

  • Python常用模块sys,os,time,random功能与用法实例分析

    Python 常用模块攻略:sys, os, time, random Python 是当前较为流行的编程语言之一,不仅因为语言简洁易学,而且因为其丰富的标准和第三方库。在常用库中,sys, os, time, random 模块可以说是较为常用和重要的模块,本文将详细讲解这四个模块的功能和用法,并提供一些实例。 sys 模块 sys 模块提供了与解释器进行…

    python 2023年6月2日
    00
  • python空元组在all中返回结果详解

    当我们在使用Python内置函数all判断一个序列是否所有元素都为True时,如果这个序列是一个空元组,它会返回True。这个行为很可能会造成理解上的困惑,因此需要进行详细的讲解。 什么是空元组 在Python中,元组(tuple)是一种不可变的序列类型。当元组中没有任何元素时,我们称之为空元组。空元组可以使用一对空的括号创建,如下所示: empty_tup…

    python 2023年5月14日
    00
  • python pandas模糊匹配 读取Excel后 获取指定指标的操作

    以下是Python Pandas模糊匹配读取Excel后获取指定指标的完整攻略: 步骤1:导入必要的库 在Python中实现Pandas模糊匹配读取Excel后获取指定指标的操作需要导入pandas库。以下是一个示例代码: import pandas as pd 步骤2:读取Excel文件 使用pandas库的read_excel()函数可以读取Excel文…

    python 2023年5月14日
    00
  • Python3 shutil(高级文件操作模块)实例用法总结

    下面是详细讲解 “Python3 shutil(高级文件操作模块)实例用法总结”的攻略: 1. shutil模块简介 shutil是Python标准库中的一个高级文件操作模块,它在os模块的基础上进行了封装,并提供了更多的文件操作方法。它支持高层次的文件操作,例如复制、移动、删除文件和目录等等。 shutil模块中的函数主要有以下几种类型: 复制文件和目录函…

    python 2023年5月13日
    00
  • 详解基于Android的Appium+Python自动化脚本编写

    详解基于Android的Appium+Python自动化脚本编写攻略 一、准备工作 1. 安装必要的软件 Java环境:需要安装Java 1.8及以上版本,可以到官网下载安装包进行安装。 Android SDK:需要在Android官网下载,安装时需要确保已经配置好环境变量。 Appium Server:可以在 Appium 官网 下载,下载完成后双击安装即…

    python 2023年5月19日
    00
  • Python实现对比两个Excel数据内容并标记出不同

    下面是Python实现对比两个Excel数据内容并标记出不同的完整实例教程。 实现思路 本文使用Python语言,利用pandas库读取Excel文件,并将数据转换为DataFrame数据结构。利用DataFrame提供的函数对两个Excel表格进行比对,找寻不同的内容,并在新的Excel表格中标记出不同的内容。 读取Excel文件,将数据转换为DataFr…

    python 2023年5月13日
    00
  • Python获取指定日期是”星期几”的6种方法

    Python获取指定日期是“星期几”的6种方法: 1)使用datetime库,调用weekday()方法 from datetime import datetime my_date = datetime(2021, 12, 25) print(my_date.weekday()) 输出结果为:5 (星期六,0表示星期一,以此类推) 2)使用calendar库…

    python 2023年6月2日
    00
  • python实现Thrift服务端的方法

    好的。首先,需要明确一些概念和背景知识: Thrift是一个跨语言的RPC框架,它使用IDL(Interface Definition Language)来定义接口和数据类型; Thrift能支持多种语言(包括Python)实现Thrift服务端和客户端,通过序列化与反序列化来实现进程通信。 接下来,我将会用Python语言为例来讲解如何实现Thrift服务…

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