Generic Python Decorators for use in any project.
generic-decorators
is released to public PyPI - generic-decorators. It can be installed using this command:
pip install generic-decorators
Summary: runs function in parallel instead of sequencial for loop.
Example
Parallel trigger of functions sample_function
with 1 param list_of_post_ids
using make_parallel
decorator and equivalent sequential trigger using for loop
.
def parallel_function_trigger():
list_of_post_ids = list(range(1, 20))
return make_parallel(sample_function)(list_of_post_ids)
#equivalent sequencial version
def serial_function_trigger():
list_of_post_ids = list(range(1, 20))
# Serial way of calling the function
results = []
for post_id in list_of_post_ids:
res = sample_function(post_id)
results.append(res)
return results
You can use below timing decorator to compare time of above parallel and sequential versions.
Description: Similar functionality like make_parallel but
uses mulitprocessing
instead of threading
.
Example
def parallel_function_trigger():
list_of_post_ids = list(range(1, 20))
return make_parallel_processes(sample_function)(list_of_post_ids)
Summary: calculate and print how much time function processing took.
Example
@timing
def sleep_n_seconds(n: int):
time.sleep(n)
sleep_n_seconds(5)
It should print something like this (time can differ):
func:'sleep_n_seconds' args:[(5,), {}] took: 5.0047 sec
Summary: make class Singleton - class which will have max 1 instance created
Example
@singleton
class MyClass(object):
"""docstring for MyClass"""
def __init__(self):
pass
for i in range(0, 10):
obj = MyClass()
print(obj)
It should print something like this (all objects of class are the same):
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>
<__main__.MyClass object at 0x7fc3bc38fc50>