api获取请求并使用异步python 3.8将其存储到数据库中

问题描述 投票:0回答:1

第一次尝试asyncioaiohttp。我有以下代码,它们从urls数据库中获取MySQL请求。获取响应并将其推送到GET数据库。

MySQL

这很好,但是要加快速度,如何运行if __name__ == "__main__": database_name = 'db_name' company_name = 'company_name' my_db = Db(database=database_name) # wrapper class for mysql.connector urls_dict = my_db.get_rest_api_urls_for_specific_company(company_name=company_name) update_id = my_db.get_updateid() my_db.get_connection(dictionary=True) for url in urls_dict: url_id = url['id'] url = url['url'] table_name = my_db.make_sql_table_name_by_url(url) insert_query = my_db.get_sql_for_insert(table_name) r = requests.get(url=url).json() # make the request args = [json.dumps(r), update_id, url_id] my_db.db_execute_one(insert_query, args, close_conn=False) my_db.close_conn()

我看过asynchronouslyherehere,但似乎无法绕开它。对此特有的任何代码示例都将受到高度赞赏。

python python-asyncio aiohttp
1个回答
0
投票

使此代码异步根本不会加快速度。除非您考虑以“并行”方式运行部分代码。例如,您可以在“相同时间”内运行多个(SQL或HTTP)查询。通过执行异步编程,您将不会在“相同时间”内执行代码。尽管您会在等待IO时受益于长时间的IO任务来执行代码的其他部分。

首先,您必须使用asynchronous库(而不是synchronous一个)。

  • [here可以用aio-libs中的mysql.connector代替。
  • [aiomysql可以替换为requests

要“并行”执行多个异步任务(例如,替换循环aiohttp,您必须仔细阅读for url in urls_dict:和函数asyncio tasks

我不会以异步方式(重新)编写代码,但是以下几行伪代码可以帮助您:

gather
© www.soinside.com 2019 - 2024. All rights reserved.