进程

启动一个子进程


import os
from multiprocessing import Process


def t(name):
    print("Child process {0} {1}".format(os.getpid(), name))


if __name__ == "__main__":
    print("Parent process {0}".format(os.getpid()))
    p = Process(target=t, args=("test",))
    print("Child process will start")
    p.start()  # 启动子进程
    p.join()   # 等待子进程结束后再继续往下运行
    print("Child process end")

进程池


import os
import time
import random
from multiprocessing import Pool


def task(name):
    print("Run task {0}, {1}".format(name, os.getpid()))
    start = time.time()
    time.sleep(random.random()*3)
    end = time.time()
    print("Task {0} runs {1} seconds".format(name, (end - start)))


if __name__ == "__main__":
    print("Parent process {0}".format(os.getpid()))
    p = Pool()          # 进程池默认数量和电脑有关, 4核CPU,就是进程池默认是4
    for i in range(5):  # 测试的电脑4核CPU,这里起5个子进程,会有一个进程等待其它进程执行完后执行
        p.apply_async(task, args=(i,))
    print("Waiting for all subprocesses done...")
    p.close()  # close 后就不能继续添加新的Process了
    p.join()   # 等待子进程结束后再继续往下运行
    print("All subprocesses done")


# Parent process 19271
# Waiting for all subprocesses done...
# Run task 0, 19272
# Run task 1, 19273
# Run task 2, 19274
# Run task 3, 19275
# Task 1 runs 1.0092787742614746 seconds
# Run task 4, 19273
# Task 3 runs 1.3692305088043213 seconds
# Task 0 runs 1.4714231491088867 seconds
# Task 2 runs 1.9193198680877686 seconds
# Task 4 runs 1.993635892868042 seconds
# All subprocesses done

subprocess

import subprocess

p = subprocess.Popen(["echo", "Hi"], stdout=subprocess.PIPE)
out, error = p.communicate()
print(out.decode("utf-8"))

# Hi