zoukankan      html  css  js  c++  java
  • Python中进程理解以及进程的创建

    忍得一时之气,免得百日之忧。

    在情绪冲动的情况下,做出的决策伤人伤己,总是让人追悔莫及。

    能忍住自己的脾气,是一种修养,更是一种能力。

    进程理论

    1、什么是进程

    进程是一个程序运行的过程

    2、什么是程序

    程序就是一堆代码文件

    3、串行、并发、并行

    • 串行:多个任务依次运行,一个运行完毕再运行下一个
    • 并行:多个任务是真的在同时运行,只有多个cpu才有并行的概念
    • 并发:多个任务看起来是在同时运行

    4、进程的创建

    • windows:CreateProcess
    • linux:fork

    5、进程的终止

    1. 正常退出
    2. 被其他进程杀死(taskill /F /PID 3333)

    6、程序运行的三种状态

    • 运行态
    • 就绪态
    • 阻塞态

    优化程序效率的核心法则:降低IO操作(硬盘IO、网络IO)

    内存》本地硬盘-》网络IO

    7、总结

    • 进程运行的三种状态:(运行态、就绪态)非阻塞态、阻塞态
    • 调用任务的两种方式:同步调用、异步调用

    进程的创建

    我们需要导入Process 模块

    from multiprocessing import Process
    

    再自定义一个函数来模拟进程效果:

    def task(n, tag):
        print("%s is running" % tag)  #进程
        time.sleep(3)                 #运行时间
        print("%s is done" % tag)     #进程结束
    

    接下来就是创建进程了:

    if __name__ == '__main__':
        p1 = Process(target=task, args=(5, "子进程1"))
        p1.start()
    

    我们需要注意的就是我们必须要在 main中建立进程。

    完整版:

    # 开启进程的方式一:
    import time
    import os
    from multiprocessing import Process
    
    def task(n, tag):
        print("%s is running" % tag)
        time.sleep(3)
        print("%s is done" % tag)
    
    if __name__ == '__main__':
        p1 = Process(target=task, args=(5, "子进程1"))
        p2 = Process(target=task, args=(3, "子进程2"))
        p3 = Process(target=task, args=(2, "子进程3"))
        p1.start()
        p2.start()
        p3.start()
        print("主进程:%s" % os.getpid())
    

    下面是运行结果:

    主进程:6928
    子进程2 is running
    子进程1 is running
    子进程3 is running
    子进程2 is done
    子进程3 is done子进程1 is done
    

    我们在os模块中可以去得到进程的ID号:

    代码如下:

    os.getpid()
    

    注意:

    我们在运行代码的时候会出现结果与上述结果不一样,这个问题是正常的,因为我们的cpu处理不是同时处理而是接到指令以后(start())再开始创建,那就会出现,我cpu刚好来运行你们程序的时候刚好就遇到了进程p2,那我就先把他运行产生出来了,我再遇到别的我再去产生进程。

    我们这里在讲一个用类的创建进程的方法:

    import time
    import os
    from multiprocessing import Process
    
    class Myprocess(Process):
        def __init__(self,tag):
            super().__init__()
            self.tag = tag
    
        def run(self) -> None:
            print("%s is running" % self.tag)
            time.sleep(3)
            print("%s is done" % self.tag)
    
    if __name__ == '__main__':
        p1 = Myprocess("进程1")
        p2 = Myprocess("进程2")
        p3 = Myprocess("进程3")
        p1.start()  # p1.run()
        p2.start()  # p2.run()
        p3.start()  # p3.run()
        print("主:%s。。。" % os.getpid())
    

    运行结果:

    主进程:12076
    进程1 is running
    进程2 is running
    进程3 is running
    进程1 is done
    进程2 is done
    进程3 is done
    
    努力学习!
  • 相关阅读:
    ThinkPHP3.1快速入门(12)自动验证
    ThinkPHP CURD方法盘点:page方法
    ThinkPHP CURD方法盘点:table方法
    ThinkPHP CURD方法盘点:order方法
    ThinkPHP CURD方法盘点:data方法
    openssl安装问题导致nginx添加ssl模块失败
    rsync介绍
    基于CRF序列标注的中文依存句法分析器的Java实现
    千万级巨型汉语词库分享
    几个开源分词系统所使用标注集的来源
  • 原文地址:https://www.cnblogs.com/Orange-YXH/p/13648095.html
Copyright © 2011-2022 走看看