python协程实现异步_python 异步协程的实现

需要对一个上百万行的json文件进行清洗,并需要将清洗好的结构化数据重新存储为csv文件。尝试使用pandas的dataframe转存清洗好的数据条目,却发现常规的清洗一条写入一条的速度太慢了,速度主要卡在每次数据的写入,于是为此专门定义了一个 asyn writeline,同时利用 async readline 每次生成 100 个协程处理100行数据,然而测试结果却和常规的按序处理无差别,平均每条数据处理速度都在 0.5 s 左右,感觉是自己的 asyn writeline 有问题,还请大神赐教。

测试代码如下:

import pandas as pd

import json

import time

import asyncio

def trop():

tropicos = pd.DataFrame()

with open(r"/tropicosbase.json", "r") as yn:

count = 0

tropicos['tag'] = None

tropicos.loc[0] = None

async def readline(line):

nonlocal count

js = json.loads(line)

await writeline(js, tropicos, count)

count += 1

tropicos.loc[count] = None

cs = yn.readlines()[:100]

tasks = [asyncio.ensure_future(readline(line)) for line in cs]

loop = asyncio.get_event_loop()

start = time.time()

loop.run_until_complete(asyncio.wait(tasks))

end = time.time()

print(end - start)

tropicos.to_csv(r'/tropicos.csv', index=None)

async def writeline(js, tropicos, count):

for k, v in js.items():

try:

tropicos[k][count] = v

except KeyError:

if k == 'detailsdiv':

pass

else:

tropicos[k] = pd.Series()

tropicos[k][count] = v

trop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值