Python教程

学习笔记-python中进程的创建

本文主要是介绍学习笔记-python中进程的创建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

创建一个进程需要使用multiprocessing模块的Process方法
使用方法:p1 = Process(target=func)
p1就是进程的对象,func就是进程启动是执行的任务;
在定义任务时也可以向任务中传参,通过Process方法中的args和kwagrs参数为任务中传递参数;
进程对象常用的几种方法
start() 启动进程,当启动多个进程时为并行;
run() 启动进程,当启动多个任务时为串行,执行完上一个任务再执行下一个任务;
terminate() 终止进程,进程未执行完也终止,但是不释放进程占用的资源;
is_alive() 判断进程是否存活,True为存活,False为结束;
join() 加入,阻塞主进程后面的代码不执行,当对应的子进程执行完毕后再执行
close() 用于释放进程占用的资源,当进程在运行是,不可释放,将会报错,可以与terminate配合使用

代码示例

# encoding: utf-8
"""
进程
线程
协程
进程的多少与服务器的硬件配置相关,需要从cpu中分配资源
"""
from multiprocessing import Process
import time
import os
"""
创建进程示例
    from multiprocessing import Process
    p = Process(target=callable, args=(c1, c2, c3, ), kwagrs='')
    p.start()       #  启动进程

主进程:执行的时候,默认的进程称为主进程
子进程:在主进程中可以开启子进程
进程中的全局变量,在每个子进程中都有一份全局变量,各自操作各自进程中的全局变量,子进程之间互不影响
阻塞主进程后面代码
    p1.join()   # p1为子进程对象
"""
number = 100
def program():
    global number
    for i in range(5):
        print("第{}行代码".format(i), os.getpid(), os.getppid())
        time.sleep(0.5)
    number -= 10
    print("program中的number:", number)

def listen_music():
    global number
    musics = ["《全球》", "《qq》", "《全球2》", "《全球3》"]
    for i in musics:
        print("正在听{}".format(i), os.getpid(), os.getppid())
        time.sleep(0.5)
    number -= 20
    print("listen_music中的number:", number)

def look_book(book):
    global number
    for i in range(5):
        print("正在看书《{}》的第{}页".format(book, i),os.getpid(), os.getppid())
        time.sleep(0.5)
    number -= 30
    print("look_book中的number:", number)



if __name__ == '__main__':
    print("当前py文件进程号{} 以及父进程号{}".format(os.getpid(), os.getppid()))
    p1 = Process(target=program)            # 通过Process创建一个进程对象
    p2 = Process(target=listen_music)
    p3 = Process(target=look_book, args=("西游记", ))      # 在创建一个进程时指定执行的函数,并传递参数
    p1.start()
    p2.start()
    p3.start()
    # p1.run()      # 使用run时仅仅是运行这个进程,并且是串行,不会去cpu中分配新的资源
    # p2.run()
    # p3.run()
    # p1.terminate()        # 终止进程,进程未执行完也终止,但是不释放进程占用的资源
    # print(p1.is_alive())         # 判断进程是否存活,True为存活,False为结束
    # join()    加入,阻塞主进程后面的代码不执行,当对应的子进程执行完成后再执行
    p1.join()
    p2.join()
    p3.join()
    print("main中的number:", number)
    # p1.close()                # 用于释放进程占用的资源,当进程在运行是,不可释放,将会报错,可以与terminate配合使用
    # p2.close()

进程池

from multiprocessing import Process, Pool
import time
import os
"""
进程池:
    Pool
    阻塞式:
    非阻塞式:
    
"""

def task1():
    print("this is task1", os.getpid(), os.getppid())
    return "task2"


def task2(msg):
    print("this is :", msg, os.getpid(), os.getppid())

if __name__ == '__main__':
    print("当前py文件进程号{} 以及父进程号{}".format(os.getpid(), os.getppid()))
        pool = Pool(4)      # 创建进程池
    # 非阻塞式
    for i in range(10):
        pool.apply_async(task1, callback=task2)     # 阻塞式:进程池中一个任务结束后才能进行下一个任务
        print("------------------------>", i)
    pool.close()
    pool.join()             # 阻塞进程池,只有执行完一个进程才会执行下一个,执行完进程池中的所有进程才会执行主进程后面的代码
    print("main, over")
这篇关于学习笔记-python中进程的创建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!