首页 > 其他分享 >Process类语法详解

Process类语法详解

时间:2023-07-23 17:33:28浏览次数:35  
标签:p2 p1 name Process 语法 process 详解 进程

'''
multiprocessing.Process 类是 multiprocessing 模块中用于创建和管理进程的主要类。它提供了一系列方法和属性,用于控制和监视进程的行为。
1. 创建 Process对象:
    语法: p = Process(target=func, args=(args,), kwargs={})
    1. target:指定要在新进程中执行的任务即函数或可调用对象。
    2. args:传递给目标函数的位置参数,以元组的形式传入。
    3. kwargs:传递给目标函数的关键字参数,以字典的形式传入。

2. 启动进程: p.start()
   创建Process对象并指定任务,调用 start() 方法来启动新进程执行任务

3. 阻塞等待进程结束: p.join()
    调用join()方法来阻塞当前进程,直到子进程执行完毕。即哪个进程执行了p.join(),那么该进程就得等p进程执行完成。

4. 判断进程是否存活: p.is_alive()
    调用is_alive() 方法来判断进程是否仍在运行。

5. 终止进程: p.terminate()
    调用terminate()方法来终止进程的执行。

6. 获取进程 ID: p.pid
    pid 属性返回进程的 ID。

7. 设置进程名称: p.name = "process_name"
    可以通过设置 name 属性来为进程指定一个名称。

8. 获取当前进程对象: multiprocessing.current_process()
    调用 current_process() 函数返回当前进程的 Process 对象。

9. 获取父进程 ID: p.ppid()
    ppid() 方法返回父进程的 ID。

10. 传递共享数据给子进程:
    multiprocessing.Manager().Value()
    multiprocessing.Manager().Array()
    使用 multiprocessing.Manager() 创建一个管理器对象,然后可以使用 Value() 和 Array() 方法创建可在多个进程之间共享的变量和数组。



'''
import multiprocessing
from multiprocessing import Process



def square(x):
    result = x * x
    print(f"The square of {x} is {result}")


if __name__ == '__main__':
    # 创建 Process 对象并指定任务
    p1 = Process(target=square, args=(5,))
    p2 = Process(target=square, args=(10,))

    # 启动进程执行任务
    p1.start()
    p2.start()

    # 阻塞等待进程结束
    p1.join()
    p2.join()

    # 判断进程是否存活
    if p1.is_alive():
        print("p1 is still running")
    else:
        print("p1 has finished")

    if p2.is_alive():
        print("p2 is still running")
    else:
        print("p2 has finished")

    # 获取进程 ID
    print("Process ID of p1:", p1.pid)
    print("Process ID of p2:", p2.pid)

    # 设置进程名称
    p1.name = "Square process 1"
    p2.name = "Square process 2"

    print("Name of p1:", p1.name)
    print("Name of p2:", p2.name)

    # 获取当前进程对象
    current_process = multiprocessing.current_process()
    print("Current process name:", current_process.name)
    print("Current process ID:", current_process.pid)

输出:

 1 The square of 5 is 25
 2 The square of 10 is 100
 3 p1 has finished
 4 p2 has finished
 5 Process ID of p1: 1860
 6 Process ID of p2: 2116
 7 Name of p1: Square process 1
 8 Name of p2: Square process 2
 9 Current process name: MainProcess
10 Current process ID: 15808
传递共享数据给子进程示例:
 1 from multiprocessing import Process, Manager
 2 
 3 
 4 def worker(shared_list):
 5     shared_list.append("data from child process")
 6 
 7 
 8 if __name__ == '__main__':
 9     with Manager() as manager:
10         # 创建共享的列表对象
11         shared_list = manager.list(["data from main process"])
12 
13         # 创建子进程,并将共享的列表对象传递给子进程
14         p = Process(target=worker, args=(shared_list,))
15         p.start()
16         p.join()
17 
18         # 打印共享的列表对象内容
19         print(shared_list)
20 '''
21 1. 使用 Manager() 创建了一个管理器对象 manager。然后,通过调用 manager.list() 方法创建了一个共享的列表对象 shared_list,初始值为 ["data from main process"]。
22 
23 2. 接着,我们创建了一个子进程 p,并将 shared_list 作为参数传递给子进程的任务函数 worker。在子进程中,我们向 shared_list 中添加了一个元素 "data from child process"。
24 
25 3. 最后,在主进程中,我们打印了 shared_list 的内容,可以看到它已经被子进程修改为 ["data from main process", "data from child process"]。
26 
27 运行以上代码,会输出如下结果: ['data from main process', 'data from child process']  说明主进程与子进程共享shared_list
28 
29 '''

 

标签:p2,p1,name,Process,语法,process,详解,进程
From: https://www.cnblogs.com/allenxx/p/17575300.html

相关文章

  • Failed to execute child process "net" when entering Nautilus
      Failedtoexecutechildprocess"net"whenenteringNautilusAskQuestionAsked 5years,3monthsagoModified 1year,7monthsagoViewed 20ktimes 19Whentypingeitherofthecommands nautilus. or xdg-open. intotermina......
  • C/C++低级语法错误
    strlen和sizeof表示不同的含义。strlen表示的是一个计数器的工作,它是从内存的某个位置(这里的位置可以是字符串开头,中间某个位置,也可以是某个不确定的内存区域)开始扫描,然后直至碰到第一个字符串结束符'\0'为止,然后返回计数器值。sizeof在C语言中是用于判断数据类型或者表达式长度......
  • 提取MyBatis中XML语法构造SQL的功能
    提取MyBatis中XML语法构造SQL的功能MyBatis能够使用*.xml来编辑XML语法格式的SQL语句,常用的xml标签有<where>,<if>,<foreach>等。偶然遇到一个场景,只想使用MyBatis的解析XML语法生成SQL的功能,而不需其他功能,于是在@Select打断点,跟踪代码执行,后续发现和XML有关的类主要在包路......
  • AOP详解
    使用AOPAOP(AspectOrientedProgramming),即面向切面编程。AOP是一种新的编程方式,它和OOP不同,OOP把系统看作多个对象的交互,AOP把系统分解为不同的关注点,或者称之为切面(Aspect)。要理解AOP的概念,我们先用OOP举例,先回顾一下OOP(ObjectOrientedProgramming),OOP作为面向对象编程的模......
  • 数据库之Sharding分库分表操作详解
    目录1分库分表1.1简介1.2实操准备1.2.1Sharding与SpringBoot公共依赖pom1.3Sharding-Jdbc与SpringBoot1.3.1pom.xml1.3.2配置文件1.3.2.1application.yml1.3.2.2application-sharding_4.yml1.4ShardingSphere与SpringBoot1.4.1pom.xml1.4.2配置文件1.4.2.1applicati......
  • MySQL——GROUP BY详解与优化
    在MySQL中,GROUPBY用于将具有指定列中相同值的行分组在一起。这是在处理大量数据时非常有用的功能,允许对数据进行分类和聚合。基本使用语法以下是GROUPBY子句的基本语法:"""SELECTcol1,col2,...,aggregate_function(col_name)FROMtable_nameWHEREconditionGROUP......
  • pom.xml中的<scope></scope>标签详解
       1、scope标签的值的种类:1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。3、runtime:该依赖项目无需参与项目的编译,不过后期的......
  • Java多线程详解——一篇文章搞懂Java多线程
    Java多线程详解——一篇文章搞懂Java多线程目录1.基本概念2.线程的创建和启动2.1.多线程实现的原理2.2.多线程的创建,方式一:继承于Thread类2.3.多线程的创建,方式一:创建Thread匿名子类(也属于方法一)2.4.多线程的创建,方式二:实现Runnable接口2.4.1.比较创建线程的两种......
  • MySQL的执行计划详解(Explain)
    MySQL的执行计划详解(Explain)1、MySQL执行计划的定义在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的。2、MySQL整个查询的过程•客户端向MySQL服务器发送一条查询请求•服务器首先检查查询缓存,如果命中缓存,则立刻返回存储......
  • Linux权限详解
    一、文件、目录权限和所有者简介:用户对一个文件或目录具有访问权限,这些访问权限决定了谁能访问,以及如何范围这些文件和目录。通过设置权限可以限制或允许以下三种用户访问:文件的用户所有者(属主)文件的组群所有者(用户所在组的同组用户)系统中的其他用户在linux系统中,每一位用......