Async functions to compare with anyio and asyncio, and toolkit to read excel with async/await.
Project description
asynctor
Some async functions that using anyio, and toolkit for excel read.
Installation
$ pip install asynctor
---> 100%
Successfully installed asynctor
with extras:
pip install "asynctor[xlsx,redis,fastapi]"
Or by pdm:
pdm add "asynctor[redis]"
Or by uv:
uv add asynctor
Or install the latest from github
uv pip install "asynctor @git+https://github.com/waketzheng/asynctor"
Or install by ssh
uv pip install "asynctor[redis] @git+ssh://git@github.com/waketzheng/asynctor.git"
Usage
- Async function that compare asyncio but use anyio:
bulk_gather/gather/run
>>> import asynctor
>>> async def foo():
... return 1
...
>>> await asynctor.bulk_gather([foo(), foo()], limit=200)
(1, 1)
>>> await asynctor.gather(foo(), foo())
(1, 1)
>>> asynctor.run(gather(foo(), foo()))
(1, 1)
- timeit
>>> import time
>>> import anyio
>>> from asynctor import timeit
>>> @timeit
... async def sleep_test():
... await anyio.sleep(3)
...
>>> await sleep()
sleep_test Cost: 3.0 seconds
>>> @timeit
... def sleep_test2():
... time.sleep(3.1)
...
>>> sleep_test2()
sleep_test2 Cost: 3.1 seconds
- AioRedis
pip install "asynctor[redis]"
from asynctor.contrib.fastapi import AioRedisDep, register_aioredis
from fastapi import FastAPI
app = FastAPI()
register_aioredis(app)
@app.get('/')
async def root(redis: AioRedisDep) -> list[str]:
return await redis.keys()
@app.get('/redis')
async def get_value_from_redis_by_key(redis: AioRedisDep, key: str) -> str:
value = await redis.get(key)
if not value:
return ''
return value.decode()
- Async Test Fixtures pip install "asynctor[testing]"
import pytest
from asynctor.testing import anyio_backend_fixture, async_client_fixture
from httpx import AsyncClient
from main import app
anyio_backend = anyio_backend_fixture()
client = async_client_fixture(app)
@pytest.mark.anyio
async def test_api(client: AsyncClient):
response = await client.get("/")
assert response.status_code == 200
- Read Excel File
pandas/openpyxl is required, can be installed with xlsx extra:
pip install "asynctor[xlsx]"
>>> from asynctor.xlsx import load_xlsx
>>> await load_xlsx('tests/demo.xlsx')
[{'Column1': 'row1-\\t%c', 'Column2\nMultiLines': 0, 'Column 3': 1, 4: ''}, {'Column1': 'r2c1\n00', 'Column2\nMultiLines': 'r2 c2', 'Column 3': 2, 4: ''}]
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
asynctor-0.10.1.tar.gz
(38.3 kB
view details)
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
asynctor-0.10.1-py3-none-any.whl
(22.2 kB
view details)
File details
Details for the file asynctor-0.10.1.tar.gz.
File metadata
- Download URL: asynctor-0.10.1.tar.gz
- Upload date:
- Size: 38.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
331b9ba6143c8d8cda5da676d3d58a9b2a300b3b5e7194375c811b09a6883961
|
|
| MD5 |
b8f42e0ca0236c09a4a70b9adc09376c
|
|
| BLAKE2b-256 |
edf337175025382f11c8e1b2f4250d5141964ccc49c2e5e3ff2bead380bf41ed
|
File details
Details for the file asynctor-0.10.1-py3-none-any.whl.
File metadata
- Download URL: asynctor-0.10.1-py3-none-any.whl
- Upload date:
- Size: 22.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d37304253f325ada318e13d701bc7923c5b3e9b6c49f2f2afb3cf59f07b4e8af
|
|
| MD5 |
d2d0c93da95397a1607c263036a6a04b
|
|
| BLAKE2b-256 |
3ff203f93fb8b04872b722383129b88657c66a0d80316726e26d28028a7a5d5e
|