zoukankan      html  css  js  c++  java
  • python3 进程的创建方式1

    # coding:utf-8
    import os
    import time
    from multiprocessing import Process
    
    
    def func1():
        print("5func1 start...")
        print("6子进程1的进程号>:", os.getpid())
        print("7子进程1的父进程号>:", os.getppid())
        time.sleep(2)
        print("11func1 end...")
    
    
    def func2():
        print("8func2 start...")
        print("9子进程2的进程号>:", os.getpid())
        print("10子进程2的父进程号>:", os.getppid())
        time.sleep(2)
        print("12func2 end...")
    
    
    if __name__ == '__main__':
        start_time_bin = time.time()
        print("1主进程开始.")
        print("2主进程号>:", os.getpid())
        print("3主进程的父进程号(即pycharm的进程号)>:", os.getppid())
        p1 = Process(target=func1,)
        p2 = Process(target=func2,)
        p1.start()
        p2.start()
        print("4主进程结束.")
        p1.join()
        p2.join()
        end_time_bin = time.time()
        print("13并行程序的执行时间(秒数):", end_time_bin - start_time_bin)
    
    
    执行结果:
    # 1主进程开始. # 2主进程号>: 3620 # 3主进程的父进程号(即pycharm的进程号)>: 7420 # 4主进程结束. # 5func1 start... # 6子进程1的进程号>: 3088 # 7子进程1的父进程号>: 3620 # 8func2 start... # 9子进程2的进程号>: 6348 # 10子进程2的父进程号>: 3620 # 11func1 end... # 12func2 end... # 13并行程序的执行时间(秒数): 2.375

     

    通过上面的代码,可以看出程序执行的过程中,一共有4个进程.

    pycharm的进程号: 7420

      主进程号: 3620

        子进程号: 3088

        子进程号: 6348

    主进程和子进程是并行的.

     

    # coding:utf-8
    import os
    import time
    
    
    def func1():
        print("4func1 start...")
        print("5子进程1的进程号>:", os.getpid())
        print("6子进程1的父进程号>:", os.getppid())
        time.sleep(2)
        print("7func1 end...")
    
    
    def func2():
        print("8func2 start...")
        print("9子进程2的进程号>:", os.getpid())
        print("10子进程2的父进程号>:", os.getppid())
        time.sleep(2)
        print("11func2 end...")
    
    if __name__ == '__main__':
        start_time_chuan = time.time()
        print("1进程开始.")
        print("2进程号>:", os.getpid())
        print("3进程的父进程号(即pycharm的进程号)>:", os.getppid())
        func1()
        func2()
        print("12主进程结束.")
        end_time_chuan = time.time()
        print("13串行程序的执行时间(秒数):", end_time_chuan - start_time_chuan)
    
    
    执行结果:
    # 1进程开始.
    # 2进程号>: 4692
    # 3进程的父进程号(即pycharm的进程号)>: 7420
    # 4func1 start...
    # 5子进程1的进程号>: 4692
    # 6子进程1的父进程号>: 7420
    # 7func1 end...
    # 8func2 start...
    # 9子进程2的进程号>: 4692
    # 10子进程2的父进程号>: 7420
    # 11func2 end...
    # 12主进程结束.
    # 13串行程序的执行时间(秒数): 4.015625

     

    通过上面的代码,可以看出程序执行的过程中,一共有2个进程.

    pycharm的进程号: 7420

      进程号: 4692

    主进程和子进程是串行的.

    总结:

      遇到有IO阻塞的情况,并行的执行时间短,串行的执行时间长.

     

    接下来咱们看下没有IO(input/output输入输出)阻塞的情况哈.

     

    # coding:utf-8
    import os
    import time
    from multiprocessing import Process
    
    
    def func1():
        print("5func1 start...")
        print("6子进程1的进程号>:", os.getpid())
        print("7子进程1的父进程号>:", os.getppid())
        print("8func1 end...")
    
    
    def func2():
        print("9func2 start...")
        print("10子进程2的进程号>:", os.getpid())
        print("11子进程2的父进程号>:", os.getppid())
        print("12func2 end...")
    
    
    if __name__ == '__main__':
        start_time_bin = time.time()
        print("1主进程开始.")
        print("2主进程号>:", os.getpid())
        print("3主进程的父进程号(即pycharm的进程号)>:", os.getppid())
        p1 = Process(target=func1,)
        p2 = Process(target=func2,)
        p1.start()
        p2.start()
        print("4主进程结束.")
        p1.join()
        p2.join()
        end_time_bin = time.time()
        print("13并行程序的执行时间(秒数):", end_time_bin - start_time_bin)
    
    
    # 1主进程开始.
    # 2主进程号>: 7072
    # 3主进程的父进程号(即pycharm的进程号)>: 7420
    # 4主进程结束.
    # 5func1 start...
    # 6子进程1的进程号>: 8428
    # 7子进程1的父进程号>: 7072
    # 8func1 end...
    # 9func2 start...
    # 10子进程2的进程号>: 8204
    # 11子进程2的父进程号>: 7072
    # 12func2 end...
    # 13并行程序的执行时间(秒数): 0.390625

     

    通过上面的代码执行结果可以看到没有IO阻塞并行的情况,程序运行的时间是: 0.390625

     

    接下来看下串行没有IO阻塞的运行时间哈

    # coding:utf-8
    import os
    import time
    
    
    def func1():
        print("4func1 start...")
        print("5子进程1的进程号>:", os.getpid())
        print("6子进程1的父进程号>:", os.getppid())
        print("7func1 end...")
    
    
    def func2():
        print("8func2 start...")
        print("9子进程2的进程号>:", os.getpid())
        print("10子进程2的父进程号>:", os.getppid())
        print("11func2 end...")
    
    if __name__ == '__main__':
        start_time_chuan = time.time()
        print("1进程开始.")
        print("2进程号>:", os.getpid())
        print("3进程的父进程号(即pycharm的进程号)>:", os.getppid())
        func1()
        func2()
        print("12主进程结束.")
        end_time_chuan = time.time()
        print("13串行程序的执行时间(秒数):", end_time_chuan - start_time_chuan)
    
    # 1进程开始.
    # 2进程号>: 10040
    # 3进程的父进程号(即pycharm的进程号)>: 7420
    # 4func1 start...
    # 5子进程1的进程号>: 10040
    # 6子进程1的父进程号>: 7420
    # 7func1 end...
    # 8func2 start...
    # 9子进程2的进程号>: 10040
    # 10子进程2的父进程号>: 7420
    # 11func2 end...
    # 12主进程结束.
    # 13串行程序的执行时间(秒数): 0.015625

    哇呕,是不是发现了什么,没有IO阻塞的情况,串行的运行时间短,并行的运行时间长,因为并行比串行更占系统资源.

     

    接下来来看下怎么给函数传参数哈

    # coding:utf-8
    import time
    from multiprocessing import Process
    
    
    def func(arg1, arg2):
        print("参数1 of func:", arg1)
        time.sleep(1)
        print("参数2 of func:", arg2)
    
    
    if __name__ == '__main__':
        print("主进程开始.")
        p = Process(target=func, args=("param1", "param2"))
        p.start()
        print("主进程结束.")
    
    
    # 主进程开始.
    # 主进程结束.
    # 参数1 of func: param1
    # 参数2 of func: param2
  • 相关阅读:
    01_15_Struts2_带参数的结果集
    Splunk_导航菜单配置
    质量管理体系框架
    测试人员和测试Leader考核维度
    作为管理者口袋里面需要有多把武器,拿来即用
    产品质量体系——如何度量产品质量?
    adb 获取平台号
    模拟定位工具gps mock
    Android 电脑投屏工具Vysor Pro介绍
    Eclipse+Maven+TestNg+ReportNg 生成测试报告
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10964145.html
Copyright © 2011-2022 走看看