Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实现马娘数据的异步协程更新 #1

Merged
merged 19 commits into from
Mar 7, 2022
Merged

Conversation

CYDXDianXian
Copy link
Contributor

  • 将马娘数据的同步更新改为异步更新

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

请问你那试过不会出现其他问题吗,我一开始也是异步的,所以采用的httpx,异步性能非常好,但是测试了几天偶尔会出现更新失败的问题,所以我才将部分换成requests同步更新的,甚至加上了time.sleep(0.5)来阻塞主线程

@CYDXDianXian
Copy link
Contributor Author

请问你那试过不会出现其他问题吗,我一开始也是异步的,所以采用的httpx,异步性能非常好,但是测试了几天偶尔会出现更新失败的问题,所以我才将部分换成requests同步更新的,甚至加上了time.sleep(0.5)来阻塞主线程

我测了两遍没出现问题,httpx部分并没改,我只是吧request全都改成了hoshino.aiorequest,解决bot更新数据的时候不会响应其它消息的问题

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

那我先试一天吧2333,等半夜的自动更新,那个点没出问题,一般就可以了

@CYDXDianXian
Copy link
Contributor Author

那我先试一天吧2333,等半夜的自动更新,那个点没出问题,一般就可以了

诶?为什么非要等到凌晨1点31分?改个临近时间测一下不行吗?(难道说只有那个点会出问题?hhh)

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

那我先试一天吧2333,等半夜的自动更新,那个点没出问题,一般就可以了

诶?为什么非要等到凌晨1点31分?改个临近时间测一下不行吗?(难道说只有那个点会出问题?hhh)

不知道为啥,前几天出问题都是半夜,可能老外用的多,我测试出最稳的点就是1点到2点,但偶尔也会有问题哈哈

@CYDXDianXian
Copy link
Contributor Author

那我先试一天吧2333,等半夜的自动更新,那个点没出问题,一般就可以了

诶?为什么非要等到凌晨1点31分?改个临近时间测一下不行吗?(难道说只有那个点会出问题?hhh)

不知道为啥,前几天出问题都是半夜,可能老外用的多,我测试出最稳的点就是1点到2点,但偶尔也会有问题哈哈

image
测试了三遍自动更新,也没啥问题。。。hhhh,期待你那边测试结果

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

这个点我倒也没事,坐等半夜了2333,没问题就换aioreq,httpx的异步协程好像还有点不一样

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

话说你在依赖文件里还加了aiofile,是打算把文件写入读取也改成异步的来解决线程安全问题吗,另外你刚上传的文件里自动更新时间忘记改回去了hhhh

@CYDXDianXian
Copy link
Contributor Author

话说你在依赖文件里还加了aiofile,是打算把文件写入读取也改成异步的来解决线程安全问题吗,另外你刚上传的文件里自动更新时间忘记改回去了hhhh

先等一下,我把httpx改成aioreq出问题了,我正在研究怎么解决233

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

话说你在依赖文件里还加了aiofile,是打算把文件写入读取也改成异步的来解决线程安全问题吗,另外你刚上传的文件里自动更新时间忘记改回去了hhhh

先等一下,我把httpx改成aioreq出问题了,我正在研究怎么解决233

这是正常现象2333,异步httpx和req不一样的,aioreq也只是咖啡佬给req套了个异步的壳hhh

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

话说你在依赖文件里还加了aiofile,是打算把文件写入读取也改成异步的来解决线程安全问题吗,另外你刚上传的文件里自动更新时间忘记改回去了hhhh

先等一下,我把httpx改成aioreq出问题了,我正在研究怎么解决233

这是正常现象2333,异步httpx和req不一样的,aioreq也只是咖啡佬给req套了个异步的壳hhh

如果我没记错,我之前也遇到requests和httpx结果不一样的问题,至今没有解决

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

话说你在依赖文件里还加了aiofile,是打算把文件写入读取也改成异步的来解决线程安全问题吗,另外你刚上传的文件里自动更新时间忘记改回去了hhhh

先等一下,我把httpx改成aioreq出问题了,我正在研究怎么解决233

然后我觉得吧,httpx也没必要换,毕竟httpx可异步可同步,需要异步的话用httpx.AsyncClient()就行了

@CYDXDianXian
Copy link
Contributor Author

其实httpx就放那不改也不会影响bot的异步响应其它消息。。。

@CYDXDianXian
Copy link
Contributor Author

CYDXDianXian commented Mar 7, 2022

I}9DL)}RH2HKW6 5N }OP

$~UV5NSK8NPP7T6%I2O_H

httpx改成aiorequests成功了,实测也没啥问题了,你试试?修改已经提交了~

@CYDXDianXian
Copy link
Contributor Author

image

自动更新也没啥问题了~

@CYDXDianXian
Copy link
Contributor Author

我去,这是什么问题。。

娘数据库自动更新失败,将在1分钟后继续自动更新,原因:string indices must be integers

@CYDXDianXian
Copy link
Contributor Author

CYDXDianXian commented Mar 7, 2022

哎嘿嘿,退回到httpx那个版本了,也无大碍,反正都不影响异步响应其他消息~~2333

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

哎嘿嘿,退回到httpx那个版本了,也无大碍,反正都不影响异步响应其他消息~~2333

啊这,哈哈哈,可还行,我还等着你给我研究出来原因呢hhhh

@CYDXDianXian
Copy link
Contributor Author

CYDXDianXian commented Mar 7, 2022

寄,为什么他有时候可以成功有时候就是string indices must be integers
即使是退回去了用httpx还是这个问题,但有时候就莫名其妙的正常。。。完全搞不明白,寄!

[2022-03-07 21:26:00,119 uma_info] INFO: Message -1966739012 triggered update_info.
Traceback (most recent call last):
  File "f:\python工程\Hoshinobot测试环境\HoshinoBot\hoshino\modules\uma_plugin\uma_info\__init__.py", line 283, in update_info
    except_uma = await uma_spider()
  File "f:\python工程\Hoshinobot测试环境\HoshinoBot\hoshino\modules\uma_plugin\uma_info\spider.py", line 38, in uma_spider
    data, next_en_name, en_name = await get_info(en_name)
  File "f:\python工程\Hoshinobot测试环境\HoshinoBot\hoshino\modules\uma_plugin\uma_info\spider.py", line 107, in get_info
    cv, bir, height, weight, measurements = await download_ocr(en_name, detail_img)
  File "f:\python工程\Hoshinobot测试环境\HoshinoBot\hoshino\modules\uma_plugin\uma_info\spider.py", line 198, in download_ocr
    text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')
TypeError: string indices must be integers

真的很奇特呢

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

这个问题应该是正常的,现在这个时间点用的人也很多,应该是ocr接口炸了,如果我没记错是因为在这:

text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')

这里ocr接口的结果文字的返回值为空列表,所以会说 string indices must be integers

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

Snipaste_2022-03-07_21-32-20
这里之前我测试的时候,有时候会飙到40s的响应时间

@CYDXDianXian
Copy link
Contributor Author

CYDXDianXian commented Mar 7, 2022

这个问题应该是正常的,现在这个时间点用的人也很多,应该是ocr接口炸了,如果我没记错是因为在这:

text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')

这里ocr接口的结果文字的返回值为空列表,所以会说 string indices must be integers

原来如此。。

    with open(current_dir,'rb') as f:
        resp = await aiorequests.post(api, files = {f'{en_name}.png': f}, data = data, timeout = 60)
        resp.encodin = 'utf-8'
        res_json = await resp.json()
        json_obj = demjson.encode(res_json) # 解决解析json出错问题
    text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')

是这里出的问题。。没错

那就是说,我之前吧httpx改aioreq也是正确的操作,因为它成功了更新了两次,之后就一直报TypeError: string indices must be integers ,这也是因为ocr接口炸了的缘故吧

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

毕竟每天500次的API,免费的要什么自行车(
1646660225621

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

这个问题应该是正常的,现在这个时间点用的人也很多,应该是ocr接口炸了,如果我没记错是因为在这:

text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')

这里ocr接口的结果文字的返回值为空列表,所以会说 string indices must be integers

原来如此。。

    with open(current_dir,'rb') as f:
        resp = await aiorequests.post(api, files = {f'{en_name}.png': f}, data = data, timeout = 60)
        resp.encodin = 'utf-8'
        res_json = await resp.json()
        json_obj = demjson.encode(res_json) # 解决解析json出错问题
    text = json.loads(json_obj)['ParsedResults'][0]['ParsedText'].replace('\r\n', '')

是这里出的问题。。没错

那就是说,我之前吧httpx改aioreq也是正确的操作,因为它成功了更新了两次,之后就一直报TypeError: string indices must be integers ,这也是因为ocr接口炸了的缘故吧

应该没错

@CYDXDianXian
Copy link
Contributor Author

毕竟每天500次的API,免费的要什么自行车( 1646660225621

哈哈哈,好,那我再改回去2333

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

毕竟每天500次的API,免费的要什么自行车( 1646660225621

哈哈哈,好,那我再改回去2333

欸,支援卡那个吗?httpx改aioreq的,那个我还真不知道欸,我也纳闷呢

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

你看马娘插件另一个模块有个抽卡的那个,那个关于爬公告的结果非常神奇,httpx爬出来的和aiohttp的和requests的有时候三个都不一样,直接给我整不会了hhhhh

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

哦对了,spider.py 里的 time.sleep(0.5) 也可以删掉了,换成异步就没必要再堵塞主线程了

@CYDXDianXian
Copy link
Contributor Author

CYDXDianXian commented Mar 7, 2022

你看马娘插件另一个模块有个抽卡的那个,那个关于爬公告的结果非常神奇,httpx爬出来的和aiohttp的和requests的有时候三个都不一样,直接给我整不会了hhhhh

还有如此神奇的事情?太草了hhh

还有,我又改回最新的aiorequests的那版本了,不用httpx,刚刚又跑了一遍,也正常能用的。。。
image

要不就这样吧,我觉得代码是没问题的,出问题都是ocr接口炸了的缘故(

@azmiao
Copy link
Owner

azmiao commented Mar 7, 2022

你看马娘插件另一个模块有个抽卡的那个,那个关于爬公告的结果非常神奇,httpx爬出来的和aiohttp的和requests的有时候三个都不一样,直接给我整不会了hhhhh

还有如此神奇的事情?太草了hhh

还有,我又改回最新的aiorequests的那版本了,不用httpx,刚刚又跑了一遍,也正常能用的。。。 image

要不就这样吧,我觉得代码是没问题的,出问题都是ocr接口炸了的缘故(

嗯嗯,反正出了事再说hhh(

@azmiao azmiao merged commit ce65d1c into azmiao:main Mar 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants