Skip to main content

Thread Regulator with notifications and statistics

Project description

ThreadRegulator

Python class that allows to control thread execution in time (requests per second) for both constant rate mode, or burst mode. With a notify option that is called after a specific number of executions or a time delta

Sample code

from thread_regulator import ThreadRegulator, safe_sleep, create_regular, create_burst
from thread_regulator.graphs import PerformanceGraphs
from random import choice


def demo_constant_rate():
    def my_notifier(stats_dict, arg1, **kwargs):
        print(arg1, stats_dict)

    def my_thread_call(*args, **kwargs):
        safe_sleep(choice((0.1, 0.2, 0.3)))
        return True

    tr = create_regular(users=4, rps=10.0, duration_sec=1.0, executions=15)
    print(tr)
    print("="*100)
    tr.set_notifier(notify_method=my_notifier, every_sec=1, every_exec=8, notify_method_args=("notify_example_arg_1", )).\
        start(my_thread_call, "arg1", "arg2", arg3="my_name", arg4="my_demo")

    return tr


def demo_burst_mode():
    def my_notifier(arg1, stats_dict):
        print(arg1, stats_dict)

    def my_thread_call(*args, **kwargs):
        safe_sleep(choice((0.1, 0.2, 0.3)))
        return True

    tr = create_burst(users=4, rps=10.0, duration_sec=2.0, req=10, dt_sec=0.5, executions=20)
    print(tr)
    print("="*100)

    tr.set_notifier(notify_method=my_notifier, every_sec=1, every_exec=8, notify_method_args=("notify_example_arg_1", )). \
        start(my_thread_call, "arg1", "arg2", arg3="my_name", arg4="my_demo")

    return tr


def show_statistics(tr):
    print("="*100)
    print("Statistics:", tr.get_statistics())
    print(f"Requests start_time jitter:\n{tr.get_execution_dataframe().start_ts.diff().describe()}")
    print(f"Requests call period: {tr.get_executions_call_period()}")
    print(f"Should be executed {tr.get_max_executions()} requests, and {tr.get_executions_started()} were executed, and {tr.get_executions_completed()} completed, and {tr.get_executions_missing()} missing.", )
    print("How many successes over how many requests executed:", tr.get_success_ratio())
    print("How many successes over how many requests should be executed:", tr.get_success_ratio_overall())


def save_results(tr, filename):
    pg = PerformanceGraphs()
    # this will save the results on an Excel file (that can be used to plot graphs as explained on last bullet)
    pg.collect_data(tr).save_data(filename)


if __name__ == "__main__":
    print("RegularMode")
    show_statistics(demo_constant_rate())

    print("\n\nBurstMode")
    tr = demo_burst_mode()
    show_statistics(tr)

    save_results(tr, "burst_mode_results.xls")

To see the graphical results:

  • Run python -m thread_regulator
  • Open the browser http://127.0.0.1:8050/
  • Drag/drop to the browser the .xls file (saved before)

Counters

Durations

Resample

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

thread_regulator-pjn2work-0.2.5.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

thread_regulator_pjn2work-0.2.5-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file thread_regulator-pjn2work-0.2.5.tar.gz.

File metadata

  • Download URL: thread_regulator-pjn2work-0.2.5.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/3.10.0 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.2

File hashes

Hashes for thread_regulator-pjn2work-0.2.5.tar.gz
Algorithm Hash digest
SHA256 10731672a310d9799e9a8259a15c8c98220c051d17b6adc309bcf8c0c623bfed
MD5 be95cadc89b6b0cd13c22c10a5d1493f
BLAKE2b-256 e211ff465be3c773e35a1571fa8f9681b36232a428aeed4d1d822524ee55255e

See more details on using hashes here.

File details

Details for the file thread_regulator_pjn2work-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: thread_regulator_pjn2work-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/3.10.0 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.2

File hashes

Hashes for thread_regulator_pjn2work-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 762e125252996a96af44e10b2871225e6dcc6931fa2fa27ef2eddaf2f2259ed3
MD5 6dff3cb76970b130b6f361c1e2660ae5
BLAKE2b-256 219d16a426ea761edaf54c1483475059b26dd55d3cae77c80bf3de1e974d5c8b

See more details on using hashes here.

Supported by

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