flask中使用requests如何用协程实现并行?
我希望使用async/await语法实现并行,看了一些资料这个是取代了yield语法的,所以我猜是不需要yield了吧?不过我试了许多方式行不通,以下是一个类似爬虫的程序,能改成协助程并行的方式给个示例吗?希望不会有“用Scrapy就好了”这样的回复,虽然Scrapy做好了这些工作,只要yield一个请求回去就行,但我希望的是自己实现,因为其实我的程序实际上并不是一个爬虫,只是附带了一些网络请求和文件读写,希望并行处理,而Scrapy里的东西除了请求器其它不是我要用的。
(相关背景:本人从别的语言转过来快速恶补了2周python勉强把项目搭了起来,用的是python3.6版本)
以下是代码示例结构:
from flask import Flask, jsonify
import requests
import asyncio
app = Flask(__name__)
class 站点A请求器():
def run(self):
resp = requests.get('http://www.baidu.com')
result = resp.text[0:100]
result += 'xxx' #做一些计算,实际上还有cookie什么的
return 0, result #返回的第一个值会根据计算的过程确定个体的数字,反正就是要返回多个值
class 站点B请求器():
def run(self):
resp = requests.get('http://www.qq.com')
result = resp.text[0:100]
result += 'yyy' #同上
return 3, result
@app.route('/test')
def test():
def 请求所有站点(sites):
resultSet = {}
for site in sites:
requestor = None
if site == 'a':
requestor = 站点A请求器()
if site == 'b':
requestor = 站点B请求器()
code, result = requestor.run()
resultSet[site] = {
'code': code,
'result': result,
}
return resultSet
result = 请求所有站点(['a', 'b'])
return jsonify({'data': result})
app.run()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)