进程、多进程、进程池
进程总概述
进程
1 | python3复制代码from multiprocessing import Process |
多进程(进程池创建)
1 | python3复制代码from multiprocessing import Pool |
解析:
对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
Parent process 87461.
Waiting for all subprocesses done…
Run task 0 (87462)…
Run task 1 (87463)…
Run task 2 (87464)…
Task 1 runs 1.66 seconds.
Run task 3 (87463)… —————–> task3在某个进程结束时,在创建
Task 2 runs 2.33 seconds.
Task 0 runs 2.54 seconds.
Task 3 runs 2.83 seconds.
All subprocesses done.
进程之间通信
Process之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。
我们以Queue为例,在父进程中创建两个子进程,一个往Queue里写数据,一个从Queue里读数据:
1 | python3复制代码from multiprocessing import Process, Queue |
线程总概述
线程
1 | python3复制代码import time, threading |
线程锁-线程安全(操作同一个变量)
1 | python3复制代码balance = 0 |
线程池创建
ThreadPoolExecutor实现
1 | python复制代码from socket import AF_INET, SOCK_STREAM, socket |
手动创建你自己的线程池, 通常可以使用一个Queue来轻松实现
1 | python3复制代码from socket import socket, AF_INET, SOCK_STREAM |
本文转载自: 掘金