Makes your blocking functions awaitable.
Project description
awaiter
Makes your blocking functions awaitable.
awaiter.ThreadExecutor()
represents a single thread that you can use to execute blocking functions in a FIFO manner.
It does not use a thread pool like asyncio.to_thread() or loop.run_in_executor(), to keep it minimal and predictable.
Usage
import asyncio
import time
from awaiter import ThreadExecutor
def blocking_function(name):
time.sleep(1)
return f'Hello, {name}!'
async def main():
async with ThreadExecutor() as executor:
result = await executor(blocking_function)('World')
print(result)
# out of context, the thread is closed here
if __name__ == '__main__':
asyncio.run(main())
Or use the decorator style:
import asyncio
import time
from awaiter import ThreadExecutor
executor = ThreadExecutor()
@executor
def blocking_function(name):
time.sleep(1)
return f'Hello, {name}!'
async def main():
executor.start()
result = await blocking_function('World')
print(result)
executor.shutdown()
# the thread will be closed.
# if you want to wait until all queued tasks are completed:
# await executor.shutdown()
if __name__ == '__main__':
asyncio.run(main())
If you want to execute multiple tasks at once without waiting in the main thread, use executor.submit()
:
# ...
fut1 = executor.submit(blocking_function, 'World')
fut2 = executor.submit(blocking_function, 'Foo')
fut3 = executor.submit(blocking_function, 'Bar')
# ...
Last but not least, it also supports generator functions:
# ...
@executor
def generator_function(name):
yield 'Hello, '
time.sleep(1)
yield name
yield '!'
# ...
async for data in generator_function('World'):
print(data)
# ...
But I want a thread pool?
We provide the awaiter.MultiThreadExecutor
helper.
It has a thread pool-like approach and is more suitable for use as a single, persistent object:
executor = MultiThreadExecutor(size=10)
How to use is the same, as the interface is identical to awaiter.ThreadExecutor
.
Install
python3 -m pip install --upgrade awaiter
License
MIT
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
Built Distribution
File details
Details for the file awaiter-0.1.1.tar.gz
.
File metadata
- Download URL: awaiter-0.1.1.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6def1c961a17f3ab1f784cc6c7373b9111280c44352629659b5c9e91ead53c46 |
|
MD5 | 3b2cb845f2a7343e230a9ce1bed04152 |
|
BLAKE2b-256 | d7b2f7ccafb6a85071445808fb83a7df942ca0887b4d815ad82307aa4b62cc5a |
File details
Details for the file awaiter-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: awaiter-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6df642cc4bd972a6788fb4230a447cf5c224c458c1f51936c53c2eb8da1f4713 |
|
MD5 | 7c365756f051e510503ef52cdc133012 |
|
BLAKE2b-256 | 8ed08dcec01d4d564552502434f575d7ee690688b1fc71dc26bf38a1475c5b13 |