首页 > 解决方案 > 带有异步和执行程序的 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 库在内部处理了这个问题,但不确定如何在这里处理它(或者即使这可能是根本问题)。

标签: python-3.xasynchronousoauth-2.0threadpoolpython-multithreading

解决方案


推荐阅读