同步调用与异步调用

同步调用与异步调用同步调用和异步调用是两种提交任务的方式同步调用:提交完任务后,就在原地等待任务执行完毕,拿到运行结果/返回值后再执行下一步,同步调用下任务是串行执行。异步调用:提交完任务后,不会再原地等待任务执行完毕,直接执行下一行代码,异步调用时并发执行。异步调用,几乎同时下达任务fromconcurrent.futuresimportProcessPoolExecutorimport…

大家好,又见面了,我是你们的朋友全栈君。

同步调用和异步调用是两种提交任务的方式

同步调用:提交完任务后,就在原地等待任务执行完毕,拿到运行结果/返回值后再执行下一步,同步调用下任务是串行执行。

异步调用:提交完任务后,不会再原地等待任务执行完毕,直接执行下一行代码,异步调用时并发执行。

异步调用,几乎同时下达任务

from concurrent.futures import ProcessPoolExecutor
import os, time,random



def task(x):
    print("%s is running" % os.getpid())
    time.sleep(random.randint(1,3))
    return x**2

if __name__=="__main__":
    p = ProcessPoolExecutor()
    futures = []
    for i in range(10):
        future = p.submit(task,i)#返回计算结果
        futures.append(future)
    p.shutdown(wait=True)#默认waiti为True 等待十个进程任务执行完,关闭进程池的入口。
    for future in futures:
        print(future.result())
    print("主")
结果为:

10760 is running
10564 is running
12848 is running
3928 is running
10564 is running
12848 is running
10760 is running
3928 is running
10760 is running
10564 is running
0
1
4
9
16
25
36
49
64
81
主

如果把p.shutdown(wait=True)去掉,则会出现结果穿插在进程中

2908 is running
8092 is running
10376 is running
13136 is running
8092 is running
2908 is running
0
1
8092 is running
10376 is running
4
2908 is running
10376 is running
9
16
25
36
49
64
81
主

 

同步调用:

def task(x):
    print("%s is running" % os.getpid())
    time.sleep(random.randint(1,3))
    return x**2

if __name__=="__main__":
    p = ProcessPoolExecutor()
    for i in range(10):
        res = p.submit(task,i).result()#返回计算结果
        print(res)
    print("主")
结果为:

8360 is running
0
472 is running
1
4888 is running
4
12980 is running
9
8360 is running
16
472 is running
25
4888 is running
36
12980 is running
49
8360 is running
64
472 is running
81
主

串行执行,效率低下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157315.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号