邯郸市有搞网站服服务的吗,网站如何更换空间,黑龙江省城乡建设厅网站首页,织梦网站栏目对应首页一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间#xff0c;相互之间不干扰。 因为GIL锁的存在#xff0c;对于CPU密集型任务#xff08;例如计算密集型操作#xff09;#xff0c;使用多进程可以提高程序的效率。 优点相互之间不干扰。 因为GIL锁的存在对于CPU密集型任务例如计算密集型操作使用多进程可以提高程序的效率。 优点 1.可以利用多核CPU提高计算效率。 2.每个进程独立运行安全性高。
二、使用 Python提供了multiprocessing模块来实现多进程。 注意 1.multiprocessing.Process 用于创建进程。target参数指定了进程要执行的函数args参数传递给该函数的参数。 2.使用 start方法启动进程。 3.join方法使主进程等待子进程完成。
import multiprocessing
import time def worker(name):print(fWorker { name} starting)time. sleep(2)print(fWorker { name} finished)if __name__ __main__:processes -[]for i in range(5):p multiprocessing. Process(targetworker, args(i,))processes. append(p) p. start()for p in processes: p. join()print(A11 workers finished)Worker 0 starting
Worker 1 starting
Worker 2 starting
Worker 3 starting
Worker 4 starting
Worker 0 finished
Worker 1 finished
Worker 2 finished
Worker 3 finished
worker 4 finished
All workers finished三、进程池 进程池是一种预先创建的一组工作进程这些进程可以重复使用来执行多个任务。通过进程池可以避免频繁创建和销毁进程的开销从而提高效率。 4.1 进程池的使用 Python的 multiprocessing 模块提供了Pool类来实现进程池。
from multiprocessing import Pool
import time def worker(num):print(fWorker { num} starting)time. sleep(2)print(fWorker { num} finished) return num * num if __name__ main: with Pool(processes-4) as pool: results pool.map(worker, range(10))print(Results:, results)1.创建进程池使用 Poolprocesses4创建一个包含4个进程的进程池。 2.提交任务pool.mapworkerrange10将 worker函数应用到 range10中的每一个元素并将任务分配给进程池中的进程去执行。 3.获取结果map方法会阻塞主进程直到所有任务完成并返回结果列表。
Worker 0 starting
Worker 1 starting
Worker 0 finished
Worker 1 finished
Worker 2 starting
Worker 3 starting
Worker 2 finished
Worker 4 starting
Worker 3 finished
Worker 4 finished
Results:[0,1,4, 9,16]4.2 常用方法 apply和apply_async: applyfuncargs同步执行类似于普通函数调用阻塞主进程直到任务完成。 apply_asyncfuncargs异步执行不阻塞主进程通过回调函数获取结果。
from multiprocessing import Pool def worker(num):return num*num def print result(result):print(Result:,result)if __name__ main:with Poolprocesses4as pool:#同步等待结果result pool.apply(worker,(10,))print(Synchronous Result:,result)#异步等待结果pool.apply_async(worker,(20,),callbackprint_result)pool.close()pool.join()
map和 map_async 使用该方法传参数时将iterable的每个元素作为参数相当于一次提交多个任务。 mapfunciterable同步映射阻塞主进程直到所有任务完成返回结果列表。 map_asyncfunciterable异步映射不阻塞主进程通过回调函数获取结果。
from multiprocessing import Pool def worker(num): return num * num def print result(results): print(Results:, results) if __name__ main: with Pool(processes4) as pool:#同步results pool.map(worker, range(10)) print(Synchronous Results:, results) # 异步pool.map async(worker, range(10), callbackprint_result)pool. close()pool.join()starmap 和 starmap_async : starmap(func, iterable_of_tuples):类似于map但可以传递多个参数。 starmap_async(func, iterable_of_tuples): 异步版本的 starmap
from multiprocessing import Pool def worker(x, y):return x * y
def print_result(results): print(Results:, results) if __name__ main:with Pool(processes4) as pool:#同步results pool.starmap(worker, [(1, 2), (3, 4), (5, 6)])print(Synchronous Results:, results)#异步pool.starmap_async(worker, [(1, 2), (3, 4), (5, 6)], callbackprint_result) pool.close()pool.join()先试用pool.close()关闭进程池防止更多的任务提交到该池才可以执行pool.join()阻塞主进程等待所有子进程完成。