进程创建 033

本文详细介绍进程创建的两种方法:直接使用Process类和自定义类继承Process。解释了args和kwargs参数传递,进程间空间隔离特性,join方法的作用,以及并发执行时间测量。还探讨了守护进程的概念,并指出子进程无法使用input。

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

进程创建 033

一 . 创建进程的两种方法 : 

  1 第一种方法: 利用Process直接生成

      p1 = Process(target = fun1,args=(1,))

      p1.start()

from multiprocessing import Process
import os
def func1(n):
    time.sleep(1)
    print(n)
def func2(n):
    time.sleep(1)
    print(n)
def func3(n):
    time.sleep(1)
    print(n)
def func4(n):
    time.sleep(1)
    print(n)
if __name__ == '__main__':
    p1 = Process(target=func1, args=(1,))  # 创建一个新进程  第一种方式
    p2 = Process(target=func2, args=(2,))
    p3 = Process(target=func3, args=(3,))
    p4 = Process(target=func4, args=(4,))
    p1.start()  # 给cpu发送指令 告诉cpu已准备就绪 等待被调用
    p2.start()
    p3.start()
    p4.start()
    print('主程序结束')
进程创建的第一种方法

  2 第二种方法:自定义一个类 继承 process 类

    重写run方法,传参数的时候要写init 但是要注意 在init方法中运用父类的init方法

    Windows 下写代码开启子进程时 必须写上 if __name__ == '__main__':

from multiprocessing import Process
class MyProcess(Process):
    def __init__(self,n,name):
        super().__init__()
        self.n = n
        self.name = name
    def run(self): # 必须用run定义
        print('子进程的进程id',os.getpid())
        print('你看看',self.n)
if __name__ == '__main__':
    p1 = MyProcess(100,name='子进程1')
    p1.start()
    print('p1.name', p1.name)
    print('p1.pid', p1.pid)
    print('主进程结束')
创建进程的第二种方法

二 两种参数形式

    args= (1,)     kwargs = {'n':1} 必须和执行任务需要的形参相同 不然传不进去

三 验证进程之间是空间隔离

# 定义全局变量
global_num = 100
def func1():
    global global_num  #引入全局变量
    global_num = 0 # 将全局变量改为0
    print('子进程全局变量', global_num)
if __name__ == "__main__":
    p1 = Process(target=func1,)
    p1.start()
    time.sleep(1)
    print('主进程的全局变量', global_num)
# 运行结果如下:
# 子进程全局变量 0
# 主进程的全局变量 100

    子进程的结果表明将全局变量修改为0 但主进程结果仍是100 证明进程之间是相互隔离的 不共享资源

四 join 方法 让主进程 加上join的地方等待 (即阻塞) 等待子进程执行完之后,再继续往下执行 我的主进程 好多时候 , 我们主进程需要子进程的执行结果 所以必须要等待.join感觉就像是将子进程和主进程拼接起来一样 将异步改为同步进行 

from multiprocessing import Process
def fun1(n):
    time.sleep(1)
    print(n)
if __name__ == '__main__':
    pro_list = []
    for i in range(10):
        p1 = Process(target=fun1,args=(i,))
        p1.start()
        pro_list.append(p1)
    for p in pro_list:
        p.join()
    print('主进程结束')
# 结果就是10个子进程结束之后才会结束主进程

或者
from multiprocessing import Process
# 验证join方法
global_num = 100
def func1():
    global global_num  #引入全局变量
    global_num = 0
    print('子进程全局变量', global_num)
if __name__ == "__main__":
    p1 = Process(target=func1,)
    p1.start()
    p1.join() # 阻塞住 等待p1子进程执行结束 主进程程序才能从这里继续往下执行
    print('主进程的全局变量', global_num)
验证join 方法

五 验证并发的执行时间 

六 for 循环在多进程中的应用 

七 关闭进程但是它只是给操作系统发个关闭进程的信号 实际操作是操作系统关闭的

僵尸进程和孤儿进程(了解)

import time
import os
from multiprocessing import Process
def func1():
    time.sleep(10)
    print(os.getpid())
    print('子进程')
if __name__ == '__main__':
    p1 = Process(target=func1,)
    p1.start()
    print('主进程的ID',os.getpid())
    print('主进程结束')

守护进程 (应用开启qq)

import time
import os
from multiprocessing import Process
def func1():
    time.sleep(5)
    print(os.getpid())
    print('子进程')
if __name__ == '__main__':
    p1 = Process(target=func1,)
    # 将p1子进程设置为守护进程
    p1.daemon = True   # 如果设为True 代表p为后台运行的守护进程, 当p的父类进程终止时,p也随之终止,并且设定为True后,p不能创建自己的
#新进程 , 必须在p.start()之前设置 也不能再创建子进程
p1.start() print('主进程结束')

 十一 子进程不能input

posted @ 2018-10-23 22:14 你没有想象的那么重要 阅读( ...) 评论( ...) 编辑 收藏
内容概要:本文详细探讨了基于阻尼连续可调减振器(CDC)的半主动悬架系统的控制策略。首先建立了CDC减振器的动力学模型,验证了其阻尼特性,并通过实验确认了模型的准确性。接着,搭建了1/4车辆悬架模型,分析了不同阻尼系数对悬架性能的影响。随后,引入了PID、自适应模糊PID和模糊-PID并联三种控制策略,通过仿真比较它们的性能提升效果。研究表明,模糊-PID并联控制能最优地提升悬架综合性能,在平顺性和稳定性间取得最佳平衡。此外,还深入分析了CDC减振器的特性,优化了控制策略,并进行了系统级验证。 适用人群:从事汽车工程、机械工程及相关领域的研究人员和技术人员,尤其是对车辆悬架系统和控制策略感兴趣的读者。 使用场景及目标:①适用于研究和开发基于CDC减振器的半主动悬架系统的工程师;②帮助理解不同控制策略(如PID、模糊PID、模糊-PID并联)在悬架系统中的应用及其性能差异;③为优化车辆行驶舒适性和稳定性提供理论依据和技术支持。 其他说明:本文不仅提供了详细的数学模型和仿真代码,还通过实验数据验证了模型的准确性。对于希望深入了解CDC减振器工作原理及其控制策略的读者来说,本文是一份极具价值的参考资料。同时,文中还介绍了多种控制策略的具体实现方法及其优缺点,为后续的研究和实际应用提供了有益的借鉴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值