AI第二次作业就想使用多进程加快一下速度,本地测试没有问题,但平台上通不过,当时OJ没有提供报错原因,最后放弃使用。这次AI由于时间限制一定需要多进程了,所以就来好好学习一下(代码来源于参考资料)
1. 多线程VS多进程
使用多线程,任务会被分为一个进程的多个子任务,通常这些线程是共用一块内存的,即 shared memory,所以如果有多个线程同时对同一块内存地址的修改,可能就会造成冲突。更安全的一种做法就是使用多进程,每个子进程的内存空间都是独立的,即 distributed memory,但子进程之间的通信可能会导致附加的 overhead。
NOTE:在Windows上要想使用进程模块,就必须把有关进程的代码写在当前.py文件的if __name__ == '__main__'
:语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。
2. Process类
例子
import multiprocessing as mp
import random
import string
random.seed(123)
# Define an output queue
output = mp.Queue()
# define a example function
def rand_string(length, output):
""" Generates a random string of numbers, lower- and uppercase chars. """
rand_str = ''.join(random.choice(
string.ascii_lowercase
+ string.ascii_uppercase
+ string.digits)
for i in range(length))
output.put(rand_str)
# Setup a list of processes that we want to run
processes = [mp.Process(target=rand_string, args=(5,