Create workers, wait for them to be ready, then run them all at once
Project description
This python module is for making simple tools that rush a resource, such as an API endpoint or web UI. This runs with both Python 2.6+ or 3.0+.
This was originally created to test the throttling of authentication attempts. It is quite basic, but was enough to get good results from a Django based web app. I imagine that this is good enough to indicate if rate limiting is reasonably implemented on faster systems (more likely to come down to network?).
Example
This example attempts to connect to an API endpoint which will throttle after 10 requests:
try:
# Python 2
from xmlrpclib import ServerProxy, Fault
except ImportError:
# Python 3
from xmlrpc.client import ServerProxy, Fault
from rush import Rusher
def api_auth_tester(index, thread_count):
"""
Rush the API with invalid authentication attempts.
"""
# prepare the worker
proxy = ServerProxy('https://badname:supersecretpassword@api.memset.com/v1/xmlrpc/')
yield # yield to indicate that the worker is ready to rush
# rush
try:
proxy.server.list()
except Fault as error:
# yield a string indicating the result
if error.faultCode == 4: # bad username/pass
yield 'attempted'
elif error.faultCode == 12: # throttled
yield 'throttled'
print("API rate limiting test:")
# the API will throttle after 10 requests, so make 9 requests first, then rush two calls
rusher = Rusher(api_auth_tester, 9)
# preform the first 9 requests so the next request should set a throttling indicator
duration, results = rusher.rush_and_report()
# change the number of threads we want to make
rusher.thread_count = 2
# only one call should not be throttled
rusher.rush_and_report()
This will produce output like the following:
API rate limiting test: 9 threads completed in .747115, results: attempted: 9 2 threads completed in .127208, results: attempted: 1 throttled: 1
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 Distributions
Built Distribution
File details
Details for the file python_rush-1.0.0-py2.py3-none-any.whl
.
File metadata
- Download URL: python_rush-1.0.0-py2.py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e10da3f9f07256ff29c056f0f8f2f2a8b278eb6aa9f081c89aef4d334c79830 |
|
MD5 | 0bc3f44a19bdf1a83a6cbf6efa48c88a |
|
BLAKE2b-256 | 7f14d025f3ac52a0b46ed5eb33b69ba8d1347b4d11f449eda1ceca79cd4053f6 |