python 怎么把同步的代码改为异步的

发布于 2020-12-30 11:35:38

import numpy as np
import tushare as ts
import aiohttp
import asyncio
import time

codes = ['787819', '787317', '787317', '600320', '600191', '600191', '600967', '600765', '600238', '603650']

cvs_30 = []
start = time.time()

async def get_index(code):

all_data = ts.get_hist_data(code, start='2020-05-12', end='2020-12-28')
if all_data is None:

    cv_30 = 0
    # 加入相对应的列表
    cvs_30.append(cv_30)


else:
    data = all_data['close']
    cv_30 = np.std(data.head(30)) / np.mean(data.head(30))

    # 加入相对应的列表
    cvs_30.append(cv_30 * 1000)

查看更多

关注者
0
被浏览
309
1 个回答
task
task 2021-05-13
This guy hasn't written anything yet

假设 原来的方式是

def myfun():

    A = fun1()

    b = fun2(A)

    return b

改造后的异步方法样子是:

async def myfun_async():

    loop = asyncio.get_event_loop()

    A = await loop.run_in_executor(None,fun1)

    b = await loop.run_in_executor(None,fun2,A)

    return b

这样就把同步代码改造成异步的了。

这样改在比单纯的将代码放到async的函数中的好处是:

当 A 和 b 如果是IO阻塞型操作时候,单纯的放到async中的代码会组设loop的执行,而改造方法会让loop在新的线程中执行这个操作,相当于多线程执行了,让函数有await的空闲给其他loop中的task来使用。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览