同步调用与异步调用

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

串行执行,效率低下。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PC上安装多个操作系统

    目 录 第1章 绪论1 1.1目标1 1.2适宜的读者1 第2章 制作启动U盘2 2.1初级安装2 2.2启动分析3 2.3高级安装13 2.3.1分区13 2.3.2复制文件16 2.3.3…

    2022年4月4日
    47
  • 修改mysql默认字符集的方法

    修改mysql默认字符集的方法

    2021年10月12日
    40
  • linux smartctl 命令,Smartctl 命令查看硬盘详细信息

    linux smartctl 命令,Smartctl 命令查看硬盘详细信息Smartctl命令查看硬盘详细信息(2011-08-3014:21:41)标签:linux硬盘信息使用时间杂谈1.1什么是Smartmontools?Smartmontools是一种硬盘检测工具,通过控制和管理硬盘的SMART(SelfMonitoringAnalysisandReportingTechnology,自动检测分析及报告技术)技术来实现的,SMART技术可以对硬盘的磁头单…

    2022年6月17日
    50
  • ROC及AUC计算方法及原理「建议收藏」

    ROC及AUC计算方法及原理「建议收藏」1.非均衡分类问题在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误判也不漏判。在这种情况下,仅仅使用分类错误率来度量是不充分的,这样的度量错误掩盖了样例如何被错分的事实。所以,在分类中,当某个类别的重要性高于其他类别时,可以使用Precison和Recall多个比…

    2022年5月13日
    49
  • java tess4j ddl_tess4j jna dll报错,求助

    java tess4j ddl_tess4j jna dll报错,求助使用最新的tess4j3.3.0包,这个版本的dll文件应该是集成在jar包里面的,环境是win10,vc环境健全,使用eclips代码:importjava.io.File;importnet.sourceforge.tess4j.ITesseract;importnet.sourceforge.tess4j.Tesseract;importnet.sourceforge.tess4j…

    2022年5月27日
    36
  • 选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被激活成功教程。[通俗易懂]

    选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被激活成功教程。[通俗易懂]做嵌入式产品,最头痛的事情就是害怕自己的代码给别人读出来,不需要通过自己,人家直接拿去生产了。所以要保护自己的最好方式就是使用硬加密IC的方式。当然有句话说的好“这世上没有激活成功教程不了的加密算法”。每一个加密芯片都有它的不足和优势,今天我不说如果激活成功教程加密IC,我拿几个产品来对比,只讲它的优点和缺点。     ATSHA204:使用SHA-256算法进行加密操作,内置16*32字节的slot(E

    2022年6月25日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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