同步和异步

同步和异步是指程序的执行方式。在同步执行中,程序会按顺序一个接一个地执行任务,直到当前任务完成。而在异步执行中,程序会在等待当前任务完成的同时,执行其他任务。

同步执行意味着程序会阻塞,等待任务完成,而异步执行则意味着程序不会阻塞,可以同时执行多个任务。

同步和异步的选择取决于你的程序需求。如果你的程序需要等待某些任务完成后才能继续,那么同步的方式可能是更好的选择。如果你的程序可以在等待任务完成的同时继续执行其他任务,那么异步的方式可能是更好的选择。

asyncio

asyncio是Python的异步编程库,用于编写并发程序。它提供了一组基于协程的工具,可以帮助你实现异步网络通信、并发计算等任务。

举个例子,假设你编写了一个程序,要向多个远程服务器发送请求,然后等待这些服务器的响应。如果你使用同步的方式编写程序,你可能会这样写:

import requests

def send_request(url):
response = requests.get(url)
return response.text # 向服务器1发送请求
response1 = send_request("http://server1.com") # 向服务器2发送请求
response2 = send_request("http://server2.com") # 向服务器3发送请求
response3 = send_request("http://server3.com")

在这段代码中,你会发现,当你向服务器1发送请求时,程序会等待服务器1的响应,然后再向服务器2发送请求,最后再向服务器3发送请求。这意味着,当你发送请求时,程序都会被阻塞,直到收到响应。

如果你使用asyncio来编写程序,你可能会这样写:

import asyncio
import aiohttp async def send_request(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text() # 向服务器1发送请求
response1 = asyncio.run(send_request("http://server1.com")) # 向服务器2发送请求
response2 = asyncio.run(send_request("http://server2.com")) # 向服务器3发送请求
response3 = asyncio.run(send_request("http://server3.com"))

在这段代码中,你会发现,当你向服务器1发送请求时,程序不会立刻等待服务器1的响应。相反,程序会立刻向服务器2和服务器3发送请求,然后等待所有响应的到来。这意味着,当你发送请求时,程序不会阻塞,而是会继续执行其他任务。

这就是asyncio的基本用法,它可以帮助你编写高效的异步程序。

Python关键字 asynico的更多相关文章

  1. Python关键字yield的解释(stackoverflow)

    3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, dista ...

  2. python关键字

    python有多少关键字? >>> import keyword >>> keyword.kwlist ['and', 'as', 'assert', 'break ...

  3. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...

  4. 【Python系列】python关键字、符号、数据类型等分类

    https://github.com/AndyFlower/Python/blob/master/sample/python前言如下部分为python关键字,操作符号,格式字符.转义字符等,以后有时间 ...

  5. Python 关键字参数和可变参数

    关键字参数 如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是python关键字参数(Keyword Arguments)——我们使用命 ...

  6. python 关键字yield

    问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, m ...

  7. python关键字详解

    今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...

  8. Python关键字参数

    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict.请看示例: #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  9. python 关键字参数

    原文地址:http://docs.pythontab.com/python/python3.4/controlflow.html#tut-functions 函数可以通过 关键字参数 的形式来调用,形 ...

  10. python关键字、转义符和字符串格式化

    最近在学learn python the hard way,学习到第37章,进行了关于关键字.转义符和字符串格式化的总结.看手头上的中文版没有及时更新.于是就把这些翻译过来,以作查阅. 关键字: 关键 ...

随机推荐

  1. Java-数组工具类Arrays

    java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作. toSting方法 public static String toString(数组):将参 ...

  2. C++期末考试题库

    哈尔滨商业大学计算机专业C++期末考试题库 下载:题库 示例: 一.单选题:1.能作为 C ++程序的基本单位是( C )A .字符 B .语句 C .函数 D .源程序文件2.程序中主函数的名字为( ...

  3. Java开发学习(四十六)----MyBatisPlus新增语句之id生成策略控制及其简化配置

    在前面有一篇博客:Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发,我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容. 我们更想要的是按照 ...

  4. JavaScript入门⑤-欲罢不能的对象原型与继承-全网一般图文版

    JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...

  5. python读入中文文本编码错误

    python读入中文文本编码错误 python读入中文txt文本: #coding:utf-8 def readFile(): fp = open('emotion_dict//neg//neg_al ...

  6. Java单例模式的最佳实践?

    "读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...

  7. 手写promise解决回调地狱问题

    在介绍promise之前我们先来看一段代码: 根据案例我们可以看出,这段代码可以无限的嵌套下去,但是每嵌套一层,代码的运行就会降低,而解决回调地狱最好的办法就是new promise 一.什么是 pr ...

  8. 基于 Traefik 的 Basic Auth 配置

    前言 Traefik是一个现代的HTTP反向代理和负载均衡器,使部署微服务变得容易. Traefik可以与现有的多种基础设施组件(Docker.Swarm模式.Kubernetes.Marathon. ...

  9. CLI框架:klish安装与使用

    在通信设备领域,思科的路由器设备可以用CLI进行操作.这里介绍的开源项目klish是思科CLI风格(CISCO-like CLI)的框架.命令配置文件为xml格式. 源码:pkun/klish: Th ...

  10. C/S UDP通信实践踩坑记录与对于ICMP的进一步认识

    背景 最近有个业务场景需要服务端(简称S)与客户端(简称C)设计一套基于UDP的通信协议--要求尽可能快的前提下可容忍一定丢包率,得以比较深入地学习和了解UDP通信和实践,在开发调试期间先后碰到了C端 ...