Skip to main content

qaviton io

Project description

Qaviton IO

logo
version license open issues downloads code size

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qaviton_io-2019.11.5.18.45.50.967182.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qaviton_io-2019.11.5.18.45.50.967182-py2.py3-none-any.whl (11.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file qaviton_io-2019.11.5.18.45.50.967182.tar.gz.

File metadata

  • Download URL: qaviton_io-2019.11.5.18.45.50.967182.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.1.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.0

File hashes

Hashes for qaviton_io-2019.11.5.18.45.50.967182.tar.gz
Algorithm Hash digest
SHA256 17547ccd20b23bab7f958395e59bb1b61f77bbe8e853c0d2d1ca78ee5505c387
MD5 4918fe7afbeffdb6ba13f77fee725937
BLAKE2b-256 6448f6cb123560192a13ae2ed63cc94f1789b09f124c544feecc2ebb1d7c15a5

See more details on using hashes here.

File details

Details for the file qaviton_io-2019.11.5.18.45.50.967182-py2.py3-none-any.whl.

File metadata

  • Download URL: qaviton_io-2019.11.5.18.45.50.967182-py2.py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.1.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.0

File hashes

Hashes for qaviton_io-2019.11.5.18.45.50.967182-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8da900f7c7f4a45177663e5b5b384659980f4a868092fadad0ffdd54de205137
MD5 43b127b9151a48327d83239127663b1a
BLAKE2b-256 eec3762a1a572ee94a65e926081b2fcb9a84ba2f7e9a4f5a7eb17834b242e380

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page