Python 多进程 -- multiprocessing 模块

– Start

如何构造进程?

构造器

multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

方法1:自定义进程类,重写 run 方法

from multiprocessing import Process


# 自定义进程类
class MyProcess(Process):
    # 如果重写 __init__ 方法,必须先调用父类的 __init__ 方法
    def __init__(self):
        super().__init__()

    def run(self):
        print('running my task')


# 使用进程
if __name__ == '__main__':
    my_task = MyProcess()
    my_task.start() # 启动进程

方法2:传入一个 run 函数

from multiprocessing import Process


# 自定义 run 函数
def my_run():
    print('running my task')


# 使用进程
if __name__ == '__main__':
    my_task = Process(target=my_run)
    my_task.start() # 启动进程

一个简单的例子

import multiprocessing, time
from multiprocessing import Process


# 自定义 run 函数
def my_run():
    for i in range(100):
        print(f'{multiprocessing.current_process().pid} -- {i}')
        time.sleep(1)


# 使用进程
if __name__ == '__main__':
    p1 = Process(target=my_run)
    p2 = Process(target=my_run)
    p1.start()  # 启动进程
    p2.start()  # 启动进程

守护进程(daemon)

守护进程用来为其他进程提供服务, 所以在一般情况下, 它会常驻在内存中而不会结束, 当只剩下守护进程时, 守护进程就终止了, 因为其他进程都结束了, 它还提供服务给谁呢? 我们可以通过 Process.daemon 方法来判断一个进程是否是守护进程.

进程相关方法和函数

Process.start()
Process.run()
Process.join()

os.getppid()
os.getpid()
Process.pid
Process.name
Process.daemon
Process.exitcode
Process.authkey
Process.sentinel

Process.is_alive()
Process.terminate()

multiprocessing.current_process()
multiprocessing.active_children()
multiprocessing.cpu_count()
multiprocessing.freeze_support()
multiprocessing.get_all_start_methods()
multiprocessing.get_context()
multiprocessing.set_executable()
multiprocessing.set_start_method()
time.sleep()

– 更多参见:Python 精萃
– 声 明:转载请注明出处
– Last Updated on 2018-10-12
– Written by ShangBo on 2018-10-12
– End

猜你喜欢

转载自blog.csdn.net/shangboerds/article/details/83032277