返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python异步编程进行API调用
  • 516
分享到

怎么用Python异步编程进行API调用

2023-06-15 13:06:41 516人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“怎么用python异步编程进行api调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python异步编程进行API调用”吧!请求库通常,当Python使用者希望进行AP

本篇内容主要讲解“怎么用python异步编程进行api调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python异步编程进行API调用”吧!

请求库

通常,当Python使用者希望进行API调用时,他们会寻找请求库。语法是我最喜欢的语法,因为如果我想进行API调用,则可以运行:

import requests response = requests.get("Http://example.com/") print(response)

现在,可以做一个for循环:

import requests for i in range(10):     response = requests.get("http://example.com/")     print(response)

每次我对进行API调用时example.com,我都必须完成:

  • 将请求发送至example.com。

  • 等待回应。

  • 得到回应。

如果想试图获取大量数据(例如,如果我想从Alpha Vantage API中提取fintech数据),您则需要一个可以设置的免费密钥api_key =  your_key_here。

import requests import os api_key = os.getenv('ALPHAVANTAGE_API_KEY') url = 'https://www.alphavantage.co/query?function=OVERVIEW&symbol={}&apikey={}' symbols = ['AAPL', 'GoOG', 'TSLA', 'MSFT', 'PEP'] results = [] for symbol in symbols:      response = requests.get(url.fORMat(symbol, api_key))      results.append(response.JSON())

此时必须等待大约1.5秒才能进行5个API调用,然后需要11秒才能进行50个API调用,需要50秒才能进行135个API调用……

如果您想获得2,000家公司或1600万种颜色的数据,我们需要做一些扩展。

异步代码与同步代码

当我们运行Python代码时,我们的过程一行一行地读取代码。在执行一行时,没有其他代码可以运行。这就是所谓的同步代码-依次进行的所有操作。

在异步代码中,我们可以在完成一项任务之前继续执行另一项任务。例如,如果我们考虑同步烹饪汉堡和蔬菜晚餐,我们的“代码”将如下所示:

cook_burger() cook_vegetables()

在这种情况下,因为汉堡是同步的,所以我们要等汉堡完成后才能开始蔬菜。但我们并不总是希望等到汉堡做完之后才能开始烹饪蔬菜。因此我们可以同时煮。一旦完成,我们就可以停止处理成品蔬菜或汉堡的任何工作。在异步代码中,它看起来像这样:

async def cook_meal():      await asyncio.gather(cook_burger(), cook_vegetables()) asyncio.run(cook_meal())

我们“收集”我们将要完成的任务,并await让它们都完成。我们在事件循环中运行它们,以跟踪完成后如何处理它们。您可以不断检查看看其中一个过程是否完成,从而想到事件循环。

现在您可能已经听说过多线程,并且它们是不同的,多线程用于拥有多个工作程序,而异步只有一名工人。

事件循环

回到我们的Alpha Vantage API调用示例。现在,在我们的代码中:

  • 发出第一个请求。

  • 等待。

  • 得到第一反应。

  • 发出第二个请求。

  • 等待。

  • 得到第二个答复。

如果我们有五个符号,我们将“等待”五次。那么我们需要代替执行此操作,启动一个API调用,然后启动其他API调用,最后再处理响应。

另外,除了执行上述操作之外,我们还可以:

  • 发出第一个请求。

  • 发出第二个请求。

  • 等待。

  • 得到第一反应。

  • 得到第二个答复。

在第二个示例中,我们只有一个等待时间!当返回响应时(可能在我们发出请求时发生),因此我们需要一些处理返回的响应的方法,这被称为事件循环。

事件循环会定期检查以查看我们的异步操作是否已返回,并安排它们进行相应的处理。当我们正常运行Python时,没有运行任何事件循环来处理该事件,因此我们需要设置事件循环,以便可以按顺序处理响应。

怎么用Python异步编程进行API调用

然后,我们可以异步运行我们的代码。

输入asyncio和aiohttp

我们现在知道,当我们异步运行代码时,我们无须等待代码操作完成,我们可以使用asyncio和aiohttp来进行操作。

import asyncio import aiohttp import os import time api_key = os.getenv('ALPHAVANTAGE_API_KEY') url = 'https://www.alphavantage.co/query?function=OVERVIEW&symbol={}&apikey={}' symbols = ['AAPL', 'GOOG', 'TSLA', 'MSFT', 'PEP'] results = [] async def get_symbols():     async with aiohttp.ClientSession() as session:         for symbol in symbols:             response = await session.get(url.format(symbol, api_key), ssl=False) asyncio.run(get_symbols())

分解

我们将使用asyncio.run(get_symbols()),这会促使事件循环的启动,并且会允许我们使用异步代码。

此时您会注意到,在以往许多的示例中,它们如何启动事件循环会更加明确:

loop = asyncio.get_event_loop() results = loop.run_until_complete(get_symbols()) loop.close()

此代码块的作用与asyncio.run(get_symbols())完全相同,那是我们的切入点。然后我们转到函数:

async def get_symbols():     async with aiohttp.ClientSession() as session:         for symbol in symbols:             response = await session.get(url.format(symbol, api_key), ssl=False)

我们必须从async关键字开始,这使Python知道此函数将是异步的,并且我们可以使用事件循环。

我们将展开一个会话aiohttp,aiohttp是异步版本requests。

我们按照相同的方式进行操作,并调用aiohttp版本的request.get(即session.get),此处需要添加内容ssl=False。

由于session.get是异步函数(也称为协程),因此我们必须await做出响应,否则它们会返回协程本身。

现在我们已经请求代码复制为异步语法,此时我们依然需要等待。

收集任务

我们即将要启动所有API调用。

import asyncio import aiohttp import os import time api_key = os.getenv('ALPHAVANTAGE_API_KEY') url = 'https://www.alphavantage.co/query?function=OVERVIEW&symbol={}&apikey={}' symbols = ['AAPL', 'GOOG', 'TSLA', 'MSFT', 'PEP'] results = [] def get_tasks(session):     tasks = []     for symbol in symbols:         tasks.append(session.get(url.format(symbol, api_key), ssl=False))     return tasks async def get_symbols():     async with aiohttp.ClientSession() as session:         tasks = get_tasks(session)         responses = await asyncio.gather(*tasks) asyncio.run(get_symbols())

我们有一个名为的全新功能get_tasks。此功能将所有协同程序合并到一个列表中,以便我们立即启动。请记住,此列表中的所有函数都必须是异步函数或已放置在事件队列中的任务。

我们还可以通过以下方式获得所有任务:

tasks = [session.get(URL.format(symbol, API_KEY), ssl=False) for symbol in symbols]

在得到要启动的功能/任务的列表后,我们可以get_symbols使用以下命令在功能中将它们全部启动:

responses = await asyncio.gather(*tasks)

我们将等待所有任务完成并将它们放入responses对象中。

responses = await asyncio.gather(session.get(URL.format('IBM', API_KEY), ssl=False), session.get(URL.format('AAPL', API_KEY), ssl=False), session.get(URL.format('MSFT', API_KEY), ssl=False))

因为*tasks只是将列表解引用为变量的一种方法。

我们“收集”所有任务并将其运送出去,当它们响应时,事件循环将它们拾取,并在我们交付所有任务后将它们放入要处理的队列中。

协程与任务

在上面的示例中,我们向asyncio.gather函数传递了异步协程列表,以便可以将它们调度到事件循环中,实际上可以更快地将它们调度到事件循环中!

在我们的get_tasks函数中,我们调用了:

tasks.append(session.get(url.format(symbol, api_key), ssl=False))

我们将该session.get函数添加到了任务列表中,并且仅在调用时将它们添加到了事件循环中gather。实际上,您可以使用asyncio.create_task以下命令更快地将其添加到事件循环中:

tasks.append(asyncio.create_task(session.get(url.format(symbol, api_key), ssl=False)))

这会将session.get函数添加到事件循环中,并且asyncio.gather函数将等待该任务完成。

请记住它们的不同之处。协程是函数,而任务则是在事件循环中安排的任务。asyncio.gather将等待任务返回和/或将协程安排到事件循环中,并等待它们返回。

到此,相信大家对“怎么用Python异步编程进行API调用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么用Python异步编程进行API调用

本文链接: https://lsjlt.com/news/280425.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Python异步编程进行API调用
    本篇内容主要讲解“怎么用Python异步编程进行API调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python异步编程进行API调用”吧!请求库通常,当Python使用者希望进行AP...
    99+
    2023-06-15
  • 如何使用Python中的协程进行异步编程
    如何使用Python中的协程进行异步编程在传统的同步编程模型中,一个任务必须等待另一个任务完成后才能继续进行,这样会造成程序的执行效率降低。为了解决这个问题,异步编程模型应运而生。Python中的协程是一种支持异步编程的重要概念,它可以让我...
    99+
    2023-10-28
    Python 协程 异步编程
  • 如何使用 PHP 进行异步编程?
    php中的异步编程使用事件循环和回调,以实现并发任务执行。它可以通过libev扩展来实现,该扩展提供了一个事件循环,用于监听事件并执行相应的回调。异步网络编程示例展示了使用libev进行...
    99+
    2024-04-19
    php 异步 网络编程
  • 如何在Linux中使用IDE进行Python异步编程?
    在Linux中使用IDE进行Python异步编程可以大大提高代码编写效率和程序运行速度。本文将介绍如何使用PyCharm IDE进行Python异步编程。 一、什么是异步编程? 异步编程是一种编程模式,它能够提高程序的运行效率。在异步编程中...
    99+
    2023-09-02
    异步编程 linux ide
  • 如何使用PHP编程实现高效的异步API调用?
    PHP编程是当今应用最广泛的编程语言之一,它不仅具有简单易学、语法简洁、易于维护等优点,还具有高效、灵活、可扩展等优势。在实现API调用时,PHP提供了一些非常方便的工具和技术,可以帮助我们实现高效的异步API调用。本文将介绍如何使用PHP...
    99+
    2023-10-29
    编程算法 api 异步编程
  • 怎么对WCF异步调用进行服务操作
    本篇内容主要讲解“怎么对WCF异步调用进行服务操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么对WCF异步调用进行服务操作”吧!我将服务契约的定义单独形成了一个程序集,并在客户端直接引用了...
    99+
    2023-06-17
  • 怎么进行Windows 8应用开发中的异步调用
    这篇文章将为大家详细讲解有关怎么进行Windows 8应用开发中的异步调用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段...
    99+
    2023-06-17
  • PHP 中如何使用 NPM 进行异步编程?
    在 PHP 中进行异步编程是一件困难的事情,因为 PHP 是一种同步语言。但是,我们可以使用 Node.js 的包管理器 NPM 来实现异步编程。 NPM 是一个包管理器,它允许我们安装、更新和管理 Node.js 的模块。在 PHP 中...
    99+
    2023-09-12
    npm 异步编程 linux
  • Java中如何使用Git进行异步编程?
    Git是一种非常流行的版本控制工具,它可以帮助开发人员更好地管理代码,协作开发和版本控制。在Java编程中,异步编程已经成为一种非常重要的技术,它可以帮助开发人员更好地处理大量的并发任务。本文将介绍如何在Java中使用Git进行异步编程。...
    99+
    2023-10-11
    git 异步编程 日志
  • Linux下如何使用ASP进行异步编程?
    ASP(Active Server Pages)是一种基于服务器端的脚本技术,可以用来构建动态的网站和Web应用程序。在ASP中,异步编程可以帮助我们提高Web应用程序的性能和响应速度。本文将介绍如何在Linux操作系统下使用ASP进行异...
    99+
    2023-10-16
    异步编程 linux numpy
  • 使用Node.js的async和await进行异步编程
    Node.JS官方文档:https://nodejs.dev/en/ 创建异步函数,并返回相关数值: 一般方式创建 function fn(){ return Promi...
    99+
    2023-05-18
    Node.js async和await Node.js 异步编程
  • 如何使用ASP框架进行异步编程?
    ASP框架是一种流行的Web应用程序框架,它可以帮助开发人员快速构建高效的Web应用程序。在Web应用程序中,异步编程是非常重要的,因为它可以提高应用程序的性能和响应能力。在本文中,我们将讨论如何使用ASP框架进行异步编程。 在ASP框架中...
    99+
    2023-06-03
    框架 异步编程 numy
  • 使用 TCell API 进行 TUI 编程
    “纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《使用 TCell API 进行 TUI 编程》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang...
    99+
    2024-04-04
  • 你知道如何使用 Python 和 NumPy 进行异步编程吗?
    当我们需要对大量数据进行处理时,异步编程可以提高效率。Python 作为一门高级编程语言,有着广泛的应用场景,并且可以与 NumPy 搭配使用,帮助我们更高效地处理数据。 异步编程是指在同一线程内处理多个任务,而不是像传统的同步编程一样,一...
    99+
    2023-07-22
    numy 异步编程 npm
  • 如何使用Python中的异步IO进行高并发编程
    如何使用Python中的异步IO进行高并发编程在当今互联网时代,高并发处理是许多系统设计的重要考虑因素之一。通过使用异步IO编程,我们可以有效地处理大量并发请求,提高系统的性能和响应速度。而Python作为一种高级编程语言,也提供了丰富的异...
    99+
    2023-10-27
    Python 高并发 异步IO
  • 使用Go语言进行异步编程,提高API响应速度的技巧
    随着互联网应用的普及,API的响应速度已经成为了衡量应用质量的重要标准之一。对于高并发的API接口,如何提高其响应速度成为了开发者们必须要面对的难题。在这方面,Go语言是一个非常好的选择,它提供了一些强大的异步编程工具,使得开发者们能够轻...
    99+
    2023-11-08
    异步编程 响应 api
  • ASP中如何使用数组进行异步编程?
    在ASP(Active Server Pages)中,异步编程是一种非常重要的技术,它可以提高Web应用程序的性能和响应速度。其中,数组是一种非常常见的数据结构,能够方便地存储和处理多个数据。本文将介绍如何在ASP中使用数组进行异步编程。...
    99+
    2023-11-13
    数组 ide 异步编程
  • Java中的Kafka 怎么利用API进行调用
    今天就跟大家聊聊有关Java中的Kafka 怎么利用API进行调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。客户端创建对应协议的请求客户端发送请求给对应的brokerbroker...
    99+
    2023-05-31
    java kafka api
  • PHP 异步编程:如何使用 API 实现同步?
    随着 Web 应用程序变得越来越复杂,需要处理的数据量也越来越大,很多时候同步处理数据已经不能满足需求。异步编程的出现,为处理这些复杂的数据提供了新的解决方案。本文将介绍 PHP 异步编程的基本概念以及如何使用 API 实现同步。 一、什...
    99+
    2023-08-05
    异步编程 api 同步
  • Java异步编程之Callbacks与Futures模型怎么调用
    本文小编为大家详细介绍“Java异步编程之Callbacks与Futures模型怎么调用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java异步编程之Callbacks与Futures模型怎么调用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作