-
apply_async
是Pool
对象的一个方法,用于异步地(非阻塞地)将任务提交到进程池中执行。 -
它的作用是:
- 将任务分配给进程池中的一个空闲进程。
- 立即返回一个
AsyncResult
对象,而不等待任务完成。 - 任务会在后台的某个进程中执行。
补充说明:
- 异步执行 :
apply_async
是非阻塞的,提交任务后会立即返回,不会等待任务完成。如果需要等待任务完成并获取结果,可以调用返回的AsyncResult
对象的get()
方法。 - 进程池的优势:使用进程池可以避免频繁创建和销毁
代码如下,
py
# -*- coding: utf-8 -*-
import os
import sys
import time
from multiprocessing.pool import ThreadPool as Pool
def func1(i):
time.sleep(0.5)
res = i + 1
return res
if __name__ == "__main__":
p = Pool(20)
tasks = []
for i in range(100):
task = p.apply_async(func1, (i,))
tasks.append(task)
p.close()
p.join()
print("tasks size: {}".format(len(tasks)))
results = []
for task in tasks:
result = task.get()
results.append(result)
print("results size: {}".format(len(results)))
print(results)
print("success!")