http client/server for asyncio
Project description
http client/server for asyncio
Features
Supports both client and server side of HTTP protocol.
Supports both client and server Web-Sockets out-of-the-box.
Web-server has middlewares and pluggable routing.
Requirements
Python >= 3.4.1
Optionally you may install cChardet library: https://pypi.python.org/pypi/cchardet/1.0.0
License
aiohttp is offered under the Apache 2 license.
Documentation
Discussion list
aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs
Source code
The latest developer version is available in a github repository: https://github.com/KeepSafe/aiohttp
Benchmarks
If you are interested in by efficiency, AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks
Getting started
Client
To retrieve something from the web:
import aiohttp
import asyncio
async def get_body(client, url):
async with client.get(url) as response:
return await response.read()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
client = aiohttp.ClientSession(loop=loop)
raw_html = loop.run_until_complete(get_body(client, 'http://python.org'))
print(raw_html)
client.close()
If you want to use timeouts for aiohttp client please use standard asyncio approach:
yield from asyncio.wait_for(client.get(url), 10)
Server
This is simple usage example:
import asyncio
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(body=text.encode('utf-8'))
async def wshandler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.tp == web.MsgType.text:
ws.send_str("Hello, {}".format(msg.data))
elif msg.tp == web.MsgType.binary:
ws.send_bytes(msg.data)
elif msg.tp == web.MsgType.close:
break
return ws
async def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/echo', wshandler)
app.router.add_route('GET', '/{name}', handle)
srv = await loop.create_server(app.make_handler(),
'127.0.0.1', 8080)
print("Server started at http://127.0.0.1:8080")
return srv
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()
Note: examples are written for Python 3.5+ and utilize PEP-492 aka async/await. If you are using Python 3.4 please replace await with yield from and async def with @coroutine e.g.:
async def coro(...): ret = await f()
shoud be replaced by:
@asyncio.coroutine def coro(...): ret = yield from f()
CHANGES
0.19.0 (11-25-2015)
Memory leak in ParserBuffer #579
Suppport gunicorn’s max_requests settings in gunicorn worker
Fix wsgi environment building #573
Improve access logging #572
Drop unused host and port from low-level server #586
Add Python 3.5 async for implementation to server websocket #543
Add Python 3.5 async for implementation to client websocket
Add Python 3.5 async with implementation to client websocket
Add charset parameter to web.Response constructor #593
Forbid passing both Content-Type header and content_type or charset params into web.Response constructor
Forbid duplicating of web.Application and web.Request #602
Add an option to pass Origin header in ws_connect #607
Add json_response function #592
Make concurrent connections respect limits #581
Collect history of responses if redirects occur #614
Enable passing pre-compressed data in requests #621
Expose named routes via UrlDispatcher.named_routes() #622
Allow disabling sendfile by environment variable AIOHTTP_NOSENDFILE #629
Use ensure_future if available
Always quote params for Content-Disposition #641
Support async for in multipart reader #640
Add Timeout context manager #611
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file aiohttp-0.19.0.tar.gz
.
File metadata
- Download URL: aiohttp-0.19.0.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bfb173baec179431a1c8f3566185e8ebbd1517cf4450217087d79e26e44c287 |
|
MD5 | f1c56892fc8b1b4f781470c7dd4226eb |
|
BLAKE2b-256 | e24556a170e6f8fb9627267174d57b5f4dabebf7d17609e9ad432ea1206ec49c |