zoukankan      html  css  js  c++  java
  • python-进程

    进程的概念

    • 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
    • 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
    • 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

    进程和线程的对比:

    • 进程是资源分配的基本单位,线程是CPU调度的基本单位;
    • 进程运行需要独立的内存资源,线程需要的是必不可少的一点资源;
    • 进程切换慢,线程切换快;
    • 线程不能独立运行,必须运行在进程中(进程能提供资源);
    • CPU密集型,进程优先,IO密集型使用线程;

    python中进程的操作

    process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建。

    1进程的使用

    import multiprocessing
    import time
    
    
    def work1():
        for i in range(10):
            print("正在运行work1.....", i, "子进程编号:", multiprocessing.current_process().pid)
            time.sleep(0.5)
    
    
    if __name__ == '__main__':
        process_obj = multiprocessing.Process(target=work1, name="p1")
        print("主进程编号:", multiprocessing.current_process().pid)
        process_obj.start()

    2)进程参数的传递

    import multiprocessing
    import time
    
    
    def work1(a, b, c):
        print("参数:", a, b, c)
        for i in range(10):
            print("正在运行work1....")
            time.sleep(0.5)
    
    
    if __name__ == '__main__':
        # 1.args传递元祖
        # process_obj = multiprocessing.Process(target=work1, args=(1, 2, 3))
        # 2.kwargs传递字典
        # process_obj = multiprocessing.Process(target=work1, kwargs={"a": 1, "b": 2, "c": 3})
        # 3.args与kwargs混合传递
        process_obj = multiprocessing.Process(target=work1, args=(1,), kwargs={"c": 3, "b": 2})
        process_obj.start()

    3)进程间全局变量不能共享

    import multiprocessing
    import time
    
    g_num = 0
    
    
    def work1():
        global g_num
        for i in range(10):
            g_num += 1
    
        print("work1.....", g_num)    # 10
    
    
    def work2():
        print("work2.....", g_num)    # 0
    
    
    if __name__ == '__main__':
        p1 = multiprocessing.Process(target=work1)
        p2 = multiprocessing.Process(target=work2)
        p1.start()
        p2.start()
        time.sleep(2)
        print("主进程....", g_num)   # 0

    4)进程的守护

    import multiprocessing
    import time
    
    
    def work():
        for i in range(10):
            print("子进程运行中....", i)
            time.sleep(0.5)
    
    
    if __name__ == '__main__':
        p = multiprocessing.Process(target=work)
        # 进程守护:子进程与主进程的一种约束,当主进程结束时,子进程也随之结束。
        p.daemon = True
        p.start()
        time.sleep(2)
        exit()
        print("xxxxxx")

    二、进程池

    进程池:是一个进程的容器,可以自动帮我们创建指定数量的进程,并管理进程及工作。

    import multiprocessing
    import time
    
    
    def copy_file():
        print("正在copy文件....", multiprocessing.current_process())
        time.sleep(0.5)
    
    
    if __name__ == '__main__':
        # 创建线程池
        pool = multiprocessing.Pool(3)
        for i in range(10):
            # 以进程池同步的方式copy文件
            # pool.apply(copy_file)
    
            # 如果以进程池异步的方式copy文件,需做两步操作
            # 1) pool.close() 表示不再接收新的任务
            # 2)主进程不在等待进程池执行结束后再退出,需要进程池join()
            pool.apply_async(copy_file)
            
        pool.close()
        pool.join()
  • 相关阅读:
    STC15F2K60S2应用笔记
    2013春季求职第二面——珠海全志科技
    SAXReader解析XML文件
    利用socket实现java程序自动关闭
    java调用oracle存储过程
    spring定时任务的简单应用(转载)
    spring map注入的使用
    解析properties文件
    System.getProperty()参数大全
    JS正则表达式大全
  • 原文地址:https://www.cnblogs.com/wakey/p/13258870.html
Copyright © 2011-2022 走看看