Python-进程-基础使用

实例1

# coding=utf-8

from multiprocessing import Process
import os

"""
多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响
父进程、子进程执行顺序没有规律,完全取决于操作系统的调度算法

Process([group [, target [, name [, args [, kwargs]]]]])
    target:表示这个进程实例所调用对象;
    args:表示调用对象的位置参数元组;
    kwargs:表示调用对象的关键字参数字典;
    name:为当前进程实例的别名;
    group:大多数情况下用不到;

Process类常用方法:
    is_alive():判断进程实例是否还在执行;
    join([timeout]):是否等待进程实例执行结束,或等待多少秒;
    start():启动进程实例(创建子进程);
    run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;
    terminate():不管任务是否完成,立即终止;

Process类常用属性:
    name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
    pid:当前进程实例的PID值;
"""


# 子进程要执行的代码
def run_proc(name):
    print('子进程运行中,name= %s ,pid=%d...' % (name, os.getpid()))


if __name__ == '__main__':
    print('父进程 %d.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('子进程将要执行')
    p.start()  # 启动
    p.join()  # 等待子进程结束后再继续往下运行,通常用于进程间的同步。
    print('子进程已结束')

实例2

# coding=utf-8
from multiprocessing import Process
import time
import os


# 两个子进程将会调用的两个方法
def worker_1(interval):
    print("worker_1,父进程(%s),当前进程(%s)" % (os.getppid(), os.getpid()))
    t_start = time.time()
    time.sleep(interval)  # 程序将会被挂起interval秒
    t_end = time.time()
    print("worker_1,执行时间为'%0.2f'秒" % (t_end - t_start))


def worker_2(interval):
    print("worker_2,父进程(%s),当前进程(%s)" % (os.getppid(), os.getpid()))
    t_start = time.time()
    time.sleep(interval)
    t_end = time.time()
    print("worker_2,执行时间为'%0.2f'秒" % (t_end - t_start))


def main():
    print("进程ID:%s" % os.getpid())  # 输出当前程序的ID
    p1 = Process(target=worker_1, args=(2,))
    p2 = Process(target=worker_2, name="进程2", args=(1,))  # 如果不指定name参数,默认的进程对象名称为Process-N,N为一个递增的整数
    p1.start()
    p2.start()
    print("p2.is_alive:%s" % p2.is_alive())  # 同时父进程仍然往下执行,如果p2进程还在执行,将会返回True
    # 输出p1和p2进程的别名和pid
    print("p1.name=%s" % p1.name)
    print("p1.pid=%s" % p1.pid)
    print("p2.name=%s" % p2.name)
    print("p2.pid=%s" % p2.pid)

    # join括号中不携带参数,表示父进程在这个位置要等待p1进程执行完成后,
    # 再继续执行下面的语句,一般用于进程间的数据同步,
    # 如果不写这一句,下面的is_alive判断将会是True,
    # 在shell(cmd)里面调用这个程序时,可以完整的看到这个过程
    p1.join()
    print("p1.is_alive=%s" % p1.is_alive())


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_44151971/article/details/85233375