This repo contains a Requests session that returns the amazing Twisted's awaitable Deferreds instead of Response objects.
It's awesome, basically — check it out:
Let's send 100 concurrent requests! \o/
Example Usage using async
/await
—
from requests_threads import AsyncSession
session = AsyncSession(n=100)
async def _main():
rs = []
for _ in range(100):
rs.append(await session.get('https://httpbin.org/get'))
print(rs)
if __name__ == '__main__':
session.run(_main)
This example works on Python 3 only. You can also provide your own asyncio
event loop!
Example Usage using Twisted —
from twisted.internet.defer import inlineCallbacks
from twisted.internet.task import react
from requests_threads import AsyncSession
session = AsyncSession(n=100)
@inlineCallbacks
def main(reactor):
responses = []
for i in range(100):
responses.append(session.get('https://httpbin.org/get'))
for response in responses:
r = yield response
print(r)
if __name__ == '__main__':
react(main)
This example works on both Python 2 and Python 3.
Each request is sent via a new thread, automatically. This works fine for basic
use cases. This automatically uses Twisted's asyncioreactor
, if you do not
provide your own reactor (progress to be made there, help requested!).
This is a an experiment, and a preview of the true asynchronous API we have planned for Requests that is currently in the works, but requires a lot of development time. If you'd like to help (p.s. we need help, send me an email).
This API is likely to change, over time, slightly.
$ pipenv install requests-threads ✨🍰✨
This codebase was inspired by future work on Requests, as well as requests-twisted.