qaviton io
Project description
Qaviton IO
Qaviton IO
is a package with a simple API, making use of python's async & multiprocessing
to enable fast execution of many asyncable operations.
Installation
pip install qaviton-io -U
Requirements
- Python 3.6+
Features
- async task manager
- process task manager
- task logger
Usage
async manager:
from time import time
from typing import List
from requests import get, Response # lets make use of requests to make async http calls
from qaviton_io import AsyncManager
# we can save the responses here
rs: List[Response] = []
# let's create an async manager
m = AsyncManager()
# first we make a simple function to make an http call.
# we want to log the result,
# and make sure that in case of an exception
# the manager won't stop
@m.log.task(exceptions=Exception)
def task():
r = get("https://qaviton.com")
r.raise_for_status()
rs.append(r)
# this will run async tasks and measure their duration
def run(tasks):
t = time()
m.run(tasks)
t = time() - t
print(f'took {round(t, 3)}s')
# let's run our task once and see how long it takes
run([task for _ in range(1)])
# now let's run our task 20 times and see how long it takes
run([task for _ in range(20)])
# let's view the results in the log report
m.log.report()
process manager:
from time import time
from requests import get
from qaviton_io.types import Tasks
from qaviton_io import ProcessManager, Log
from traceback import format_exc
# make sure your tasks are defined at the module level,
# so they can be pickled by multiprocessing
# first we need to make a log registry
log = Log()
# now we make some tasks
# this is a nested task
# we don't want to handle any exceptions
# so in case of failure the parent will not proceed
@log.task()
def task(url):
r = get(url)
r.raise_for_status()
# this is the prent task
# we want to handle all exceptions
# so in case of failure the next task will execute
@log.task(exceptions=Exception)
def multi_task():
for url in [
"https://qaviton.com",
"https://qaviton.co.il", # make sure you enter a valid address
"https://qaviton.com1", # make sure you enter a valid address
]:
task(url)
# let's create a function to execute tasks
def execute_tasks(tasks: Tasks, timeout):
manager = ProcessManager()
t = time()
try:
manager.run_until_complete(tasks, timeout=timeout)
timed_out = None
except TimeoutError:
timed_out = format_exc()
t = time() - t
manager.log.report()
print(f'took {round(t, 3)}s\n')
manager.log.clear()
return timed_out
# now all that's left is to run the tasks
if __name__ == "__main__":
timeouts = [
execute_tasks([multi_task for _ in range(1)], timeout=3),
execute_tasks([multi_task for _ in range(20)], timeout=6),
execute_tasks([multi_task for _ in range(80)], timeout=9),
]
for timeout in timeouts:
if timeout:
print(timeout)
notes:
-
for good performance and easy usage
you should probably stick with using the AsyncManager -
The ProcessManager uses async operations as well as multi-processing.
It distributes tasks across cpus, and those tasks are executed using the AsyncManager
if you want maximum efficiency you should consider using the ProcessManager -
The ProcessManager uses the multiprocessing module
and should be treated with it's restrictions & limitations accordingly -
The ProcessManager gets stuck easily,
make sure to use timeouts when using it
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
Hashes for qaviton_io-2019.11.3.18.11.11.388423.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ba46b539c6005ccc5a56273207da7353f47abfa9fef32f19dbcfa88fb2e035f |
|
MD5 | 6f19ca732fc637df02377a7044eff104 |
|
BLAKE2b-256 | 710a33578c84557238d53931c2f298d9cbfe1e290cf2182e61fa716a5d9c5d2b |
Hashes for qaviton_io-2019.11.3.18.11.11.388423-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac00f87121f9c26b4d126cce83f1a57cfe7298ab0532fb635dca646dc307c105 |
|
MD5 | 1fe5674c41e02e15f94a8449317d2159 |
|
BLAKE2b-256 | a0bec274a8adcb330c7433251c73c336dda57315f6f3da6f4edd7dc2712f5773 |