python-3.x - 带有异步和执行程序的 Python Oauth2 导致间歇性错误
问题描述
我正在尝试加快大量通话。调用是使用 Oauth2 框架进行的,使用 3rd 方模块来格式化请求并且不使用异步代码。从文档来看,这意味着我不能使用 aioHttp 会话。
为了尝试提高性能,我尝试使用 asyncio 和 ThreadpoolExecutor 来拆分不同的任务。有时这种方法有效,有时(使用相同的代码和相同的调用)当第 3 方包装器解码响应时,我会收到 json.Decode 错误。具体来说,
JSONDecodeError("期望值", s, err.value) 从无
如果我同步运行相同的代码,则不会发生这种情况。
我有同步 Oauth 功能
def calls(date):
# psuedo code to give you the gist
client_id = myid
client_secret = mysecret
oauthclient = OauthClient(client_id, client_secret otherparams)
response = oauthclient.specificrequest.date
print(response)
如果我同步调用它,它会按预期工作:
list_of_dates = [date1, date2, date3,...]
for date in list_of_dates:
calls(date)
我的异步代码如下所示:
async def run_blocking_tasks(executor):
loop = asyncio.get_event_loop()
blocking_tasks = [loop.run_in_executor(executor, calls, date)
for date in list_of_dates]
completed, pending = await asyncio.wait(blocking_tasks)
executor = concurrent.futures.ThreadPoolExecutor(
max_workers=6,)
event_loop = asyncio.get_event_loop()
try:
event_loop.run_until_complete(
run_blocking_tasks(executor)
)
finally:
event_loop.close()
如上所述,同步代码始终有效,异步方法非常不稳定,因为它有时有效,有时会引发解码错误。我对网络很陌生(通常使用我电脑上的数据进行数据分析)所以不太确定如何尝试修复它。
环顾其他问题,如果有延迟,可能是呼叫等待的时间不够长,然后要么没有响应,要么没有响应,因此 json.Decode 失败。我假设 aioHttp 库在内部处理了这个问题,但不确定如何在这里处理它(或者即使这可能是根本问题)。
解决方案
推荐阅读
- postgresql - Debezium Postgres Kafka Connector heartbeat is not committing LSN
- mongodb - Mongo-Express 由 Docker-Compose 启动导致错误 [MongoError]: failed to connect to server [mongo:27017] on first connect
- angular - Angular 8 自定义验证器从不返回错误
- ruby-on-rails - 设计注册电子邮件未到达“已发送邮件”很奇怪并且包含 Macbook 名称
- c# - 为什么 Unity 会在此处抛出错误 CS0136 而 Visual Studio 2019 不会?
- node.js - Watson Assistant 响应滞后
- automated-tests - 目录中每个测试用例文件的套件设置和拆卸
- google-analytics - 完整引荐来源网址未显示完整网址
- javascript - PySide 将 HTML 中的按钮连接到 PySide 插槽
- jvectormap - Jvectormap 在预选区域上仅放置一个新标记