concurrent-utils
Project description
Concurrency utilities for Python 3.7 + asyncio; the main portion is a component abstraction. To support this, some pipe implementations for inter-task, inter-thread, and inter-process communication and some serialization utilities are provided as well. Inter-process communication is based on ZeroMQ. Finally a class EventLoopThread is provided that can be used for bridging synchronous and asynchronous code.
A “component” is code that is executing on its own, like an asyncio task, a thread, a worker thread’s load, or a process. Components process commands issued by their owner, and create events to be handler by their owner. Components may also produce a result, and of course may communicate with other entities than their owner.
Although asyncio is used heavily, the connection between a workload and its owner decouples the two to allow for any model of concurrency. Here is an example, taken and adapted from the test suite:
import asyncio
from concurrent.futures import ThreadPoolExecutor
from concurrent_utils.component import Component, component_workload, start_component_in_thread
async def test_thread_component_result_success_and_command():
@component_workload
async def component(x, *, commands, events):
await events.send(Component.EVENT_START)
### startup complete
# reply to command
await commands.send(await commands.recv() + 1)
# return
return x
e = ThreadPoolExecutor(1)
comp = await start_component_in_thread(e, component, 1)
assert await comp.request(1) == 2
assert await comp.result() == 1
asyncio.run(test_thread_component_result_success_and_command())
Although the component is defined as a coroutine, it is (in this case) not executed on the owner’s event loop. The same component could, without modification, be run on the owner’s event loop, or, with minor modifications to make the component function pickle-able, be run in a worker process instead.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file concurrent-utils-0.2.0.tar.gz.
File metadata
- Download URL: concurrent-utils-0.2.0.tar.gz
- Upload date:
- Size: 24.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c9986689e9e2bff125871e2a5b128162ed00f14bd875c32057b1f9f9d6ce7b4
|
|
| MD5 |
3ee675e56d16c11f10675e136da480b0
|
|
| BLAKE2b-256 |
e097e4950888d094cca2fbfb55f146314c01e2a432c3f558b96ad4d26d32416c
|
File details
Details for the file concurrent_utils-0.2.0-py3-none-any.whl.
File metadata
- Download URL: concurrent_utils-0.2.0-py3-none-any.whl
- Upload date:
- Size: 25.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0rc1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17b0b27d55c2478d885ccde7a0efa76bdf058963b05227d5ea98e898cb0f8a82
|
|
| MD5 |
8b56d86052013e0d1b81a6723be88093
|
|
| BLAKE2b-256 |
1af86dfa43d24666cf674c768351631a4840ffe80935ce039bd4652bd40584dd
|