python异步写文件_结合异步http请求将数据写入文件
我從here編輯了此代碼:import asyncio
import time
from aiohttp import ClientPayloadError
from aiohttp import ClientSession
COUNTER = 1
async def fetch(url, session):
async with session.get(url) as response:
delay = response.headers.get("DELAY")
date = response.headers.get("DATE")
global COUNTER
COUNTER +=1
print("{}. {}:{} with delay {}".format(str(COUNTER), date, response.url, delay))
try:
return await response.text()
except ClientPayloadError:
print("ERROR: ".format(url))
async def bound_fetch(sem, url, session):
# Getter function with semaphore.
async with sem:
await fetch(url, session)
async def run():
urls = [build_url(id) for id in load_ids()]
tasks = []
# create instance of Semaphore
sem = asyncio.Semaphore(1000)
# Create client session that will ensure we dont open new connection
# per each request.
async with ClientSession(conn_timeout=10000, read_timeout=10000) as session:
for url in urls:
#pass Semaphore and session to every GET request
task = asyncio.ensure_future(bound_fetch(sem, url, session))
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
def build_url(id):
url = 'http://api.metagenomics.anl.gov/annotation/sequence/{}?source=Refseq'.format(id)
return url
def load_ids():
#in the "real" code I will load a file here and extract the ids
return """
mgm4558908.3
mgm4484962.3
mgm4734169.3
mgm4558911.3
mgm4484983.3
mgm4558918.3
""".strip().split()
start = time.clock()
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run())
loop.run_until_complete(future)
run_time = (start - time.clock())/60
print("this took: {} minutes".format(run_time))
我知道我可以使用:print(await response.text())打印響應數據,但是我不喜歡異步代碼,因此我不知道應該如何以及在哪里打開并寫入文件。因為我認為在同一時間寫入同一個文件時,有某種線程可能會導致問題(我熟悉多處理)。在
總結
以上是生活随笔為你收集整理的python异步写文件_结合异步http请求将数据写入文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跑步app保活_android判断不同手
- 下一篇: linux ttyusb读写_linux