【Python】多进程

来源:互联网 发布:什么是共和 知乎 编辑:程序博客网 时间:2024/06/06 08:39

进程以及状态

1. 进程

程序:例如xxx.py这是程序,是一个静态的

进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。

2. 进程的状态

工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态

  • 就绪态:运行的条件都已经慢去,正在等在cpu执行
  • 执行态:cpu正在执行其功能
  • 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态
  • 进程的创建-multiprocessing

    multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情

    1. 2个while循环一起执行

    # -*- coding:utf-8 -*-from multiprocessing import Processimport timedef run_proc():    """子进程要执行的代码"""    while True:        print("----2----")        time.sleep(1)if __name__=='__main__':    p = Process(target=run_proc)    p.start()    while True:        print("----1----")        time.sleep(1)

    说明

    • 创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动

    2. 进程pid

    # -*- coding:utf-8 -*-from multiprocessing import Processimport osimport timedef run_proc():    """子进程要执行的代码"""    print('子进程运行中,pid=%d...' % os.getpid())  # os.getpid获取当前进程的进程号    print('子进程将要结束...')if __name__ == '__main__':    print('父进程pid: %d' % os.getpid())  # os.getpid获取当前进程的进程号    p = Process(target=run_proc)    p.start()

    3. Process语法结构如下:

    Process([group [, target [, name [, args [, kwargs]]]]])

    • target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
    • args:给target指定的函数传递的参数,以元组的方式传递
    • kwargs:给target指定的函数传递命名参数
    • name:给进程设定一个名字,可以不设定
    • group:指定进程组,大多数情况下用不到

    Process创建的实例对象的常用方法:

    • start():启动子进程实例(创建子进程)
    • is_alive():判断进程子进程是否还在活着
    • join([timeout]):是否等待子进程执行结束,或等待多少秒
    • terminate():不管任务是否完成,立即终止子进程

    Process创建的实例对象的常用属性:

    • name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
    • pid:当前进程的pid(进程号)

    4. 给子进程指定的函数传递参数

    # -*- coding:utf-8 -*-from multiprocessing import Processimport osfrom time import sleepdef run_proc(name, age, **kwargs):    for i in range(10):        print('子进程运行中,name= %s,age=%d ,pid=%d...' % (name, age, os.getpid()))        print(kwargs)        sleep(0.2)if __name__=='__main__':    p = Process(target=run_proc, args=('test',18), kwargs={"m":20})    p.start()    sleep(1)  # 1秒中之后,立即结束子进程    p.terminate()    p.join()

    运行结果:

    子进程运行中,name= test,age=18 ,pid=45097...{'m': 20}子进程运行中,name= test,age=18 ,pid=45097...{'m': 20}子进程运行中,name= test,age=18 ,pid=45097...{'m': 20}子进程运行中,name= test,age=18 ,pid=45097...{'m': 20}子进程运行中,name= test,age=18 ,pid=45097...{'m': 20}

    5. 进程间不同享全局变量

    # -*- coding:utf-8 -*-from multiprocessing import Processimport osimport timenums = [11, 22]def work1():    """子进程要执行的代码"""    print("in process1 pid=%d ,nums=%s" % (os.getpid(), nums))    for i in range(3):        nums.append(i)        time.sleep(1)        print("in process1 pid=%d ,nums=%s" % (os.getpid(), nums))def work2():    """子进程要执行的代码"""    print("in process2 pid=%d ,nums=%s" % (os.getpid(), nums))if __name__ == '__main__':    p1 = Process(target=work1)    p1.start()    p1.join()    p2 = Process(target=work2)    p2.start()
  • 运行结果:

    in process1 pid=11349 ,nums=[11, 22]in process1 pid=11349 ,nums=[11, 22, 0]in process1 pid=11349 ,nums=[11, 22, 0, 1]in process1 pid=11349 ,nums=[11, 22, 0, 1, 2]in process2 pid=11350 ,nums=[11, 22]

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 sanyi 600031股票 600031股票行情 浮世万千吾爱有三一为日 三七花 三七粉功效 三七功效 三七的功效 三七片 三七分 三七田七 三七发型男 三七伤药片 藤三七 三七图片 田七三七 野三七 三七菜 孟婆三七 三七粉作用 三七中文网 三七价格 文山三七 三七纹理烫 三七丹参片 三七分发型 三七花功效 三七粉面膜 三七发型 三七的图片 土三七和三七的区别 土三七 土三七图片 三七和土三七实物图 三七种植 三七土 土三七与三七图片对比 土三七和三七的区别图片 三七参图片 云三七 冻干三七