37 lines
808 B
Python
37 lines
808 B
Python
|
from sanic import Sanic
|
||
|
from sanic.response import json
|
||
|
|
||
|
import asyncio
|
||
|
import aiohttp
|
||
|
|
||
|
app = Sanic(__name__)
|
||
|
|
||
|
sem = None
|
||
|
|
||
|
def init(sanic, loop):
|
||
|
global sem
|
||
|
CONCURRENCY_PER_WORKER = 4
|
||
|
sem = asyncio.Semaphore(CONCURRENCY_PER_WORKER, loop=loop)
|
||
|
|
||
|
async def bounded_fetch(session, url):
|
||
|
"""
|
||
|
Use session object to perform 'get' request on url
|
||
|
"""
|
||
|
async with sem, session.get(url) as response:
|
||
|
return await response.json()
|
||
|
|
||
|
|
||
|
@app.route("/")
|
||
|
async def test(request):
|
||
|
"""
|
||
|
Download and serve example JSON
|
||
|
"""
|
||
|
url = "https://api.github.com/repos/channelcat/sanic"
|
||
|
|
||
|
async with aiohttp.ClientSession() as session:
|
||
|
response = await bounded_fetch(session, url)
|
||
|
return json(response)
|
||
|
|
||
|
|
||
|
app.run(host="0.0.0.0", port=8000, workers=2, before_start=init)
|