同步调用与异步调用

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


相关推荐

  • YUM源仓库配置_开源仓库

    YUM源仓库配置_开源仓库YUM源仓库配置YUM源仓库配置YUM简介软件仓库的提供方式RPM软件包的来源以ftp方式构建YUM仓库1.在服务器上安装ftp2.命名服务器地址3.查看挂载4.进行匿名登录设置5.在一个客户机上登录安装ftp6.查看文件上传是否成功7.在服务器上查看yum源文件8.移动所有源文件到backup中,并创建新的目录源文件f.repo9.查看配置文件10.移动所有挂载目录下的文件到ftp下11.清除所有缓存,建立缓存12.安装ftp进行测试,ftp方式的yum仓库源是否可行YUM常用命令1.查询软件包2.查询

    2025年7月10日
    4
  • 使用bootbox.js(二级务必提交书面和数字到数字中国)

    使用bootbox.js(二级务必提交书面和数字到数字中国)

    2022年1月3日
    45
  • linux解压zip文件,

    linux解压zip文件,一,linux解压zip文件,命令:unzip如果没有该命令,可先安装,命令为:yum-yinstallunzip

    2022年5月24日
    37
  • 单片机ds1302时钟程序(51单片机液晶显示程序)

    /*总体要求*//*在1602上显示年月日星期时分秒,并且按照秒来实时更新显示可以闹钟设定,到点报警功能,报警响起时,任意键可以取消报警四个按键,根据功能可以调节参数,分别为功能键,数值增大键,数值减少键,闹钟查看键,每次按键按下,蜂鸣器都会滴一声,利用DS12C887实现断电后,再次上电,时间仍可以准确显示*//*另外这个程序中文部分是学习了一个半月C语…

    2022年4月14日
    206
  • php小区物业管理系统_代挂网源码最新版

    php小区物业管理系统_代挂网源码最新版萌驰物管家目前采用的是:域名授权(不限制IP,域名只授权一个,但您可以解析多个域名到同一站点,授权的域名必须保证可以访问到站点)萌驰物管家老客户首次更换授权域名是免费的,之后收费标准:800/次关于支付微信支付官方通道可以走服务商自己的,非法人结算对私结算可以走悟能科技对接好的(汇付天下,随行付,乐刷,等)。独立部署只有后台跟公众号及小程序APP需要单独购买2万一个端。悟能科技官网:www.wun…

    2022年10月18日
    4
  • leetcode-49字母异位词分组(map)[通俗易懂]

    leetcode-49字母异位词分组(map)[通俗易懂]原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

    2022年8月9日
    11

发表回复

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

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