Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/requests/requests-threads

🎭 Twisted Deferred Thread backend for Requests.
https://github.com/requests/requests-threads

async asyncio deferred requests threads twisted

Last synced: 3 months ago
JSON representation

🎭 Twisted Deferred Thread backend for Requests.

Awesome Lists containing this project

README

        

requests-threads 🎭
===================

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:

.. image:: https://farm5.staticflickr.com/4418/35904417594_c4933a2171_k_d.jpg

Examples
--------

Let's send 100 concurrent requests! \\o/

**Example Usage** using ``async``/``await`` β€”

.. code:: python

from requests_threads import AsyncSession

session = AsyncSession(n=100)

async def _main():
rs = []
for _ in range(100):
rs.append(await session.get('http://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 β€”

.. code:: python


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('http://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.

Installation
------------

::

$ pipenv install requests-threads
✨🍰✨

Inspiration
-----------

This codebase was inspired by future work on Requests, as well as `requests-twisted `_.