單線程下兩種相對高效的獲取數據的方法

1 方法一是通過requests.Session  一次性獲取TCP連接後,之後的請求可以共享

import requests
import time
headers = {"Content-Type":"application/json",
           "Authorization":"Bearer 86e9e12426c77b242522429e308068a921819fad3a44-3386c7b03993469c343536536346947"}
url = 'https://api-fxpractice.oanda.com/v3/instruments/EUR_USD/candles'
count = '10' 
granularity = 'M1'
price = 'M'
fields={'count':count,'granularity':granularity,'price':price}
session = requests.Session()
session.headers.update(headers)
session.params.update(fields)
num = 0
while True:
    time.sleep(0.2)
    with session.get(url,headers=headers) as r:
        print(r.status_code)
        print(r.text)

2 通過協程的方式獲得更爲高效的請求

import aiohttp
import asyncio

headers = {"Content-Type":"application/json",
           "Authorization":"Bearer 86e9e23425368a921819fad3a44-3386c7b252424255e4134812f7d947"}
url = 'https://api-fxpractice.oanda.com/v3/instruments/EUR_USD/candles'
count = '10'
granularity = 'M1'
price = 'M'
params={'count':count,'granularity':granularity,'price':price}
    
async def fetch():
    await asyncio.sleep(0.2)
    async with aiohttp.ClientSession(headers=headers) as session:
        while True:
            async with session.get(url,params=params) as resp:
                print(resp.status)
                print(await resp.text())
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(fetch())
    except RuntimeError as e:
        pass

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章