Source code for chimcla.asyncio_tools
"""
Helper module; provides useful functions for running python code in background or in parallel.
"""
import asyncio
from asyncio import run
from tqdm.asyncio import tqdm as tqdm_a
import functools
[docs]
def background(f):
"""
decorator for parallelization
"""
# source: https://stackoverflow.com/a/59385935
from ipydex import IPS
def wrapped(arg, arg2=None, **kwargs):
if arg2:
print(f"{arg=} ({type(arg)=}), {arg2=} ({type(arg)=})")
func_with_kwargs = functools.partial(f, **kwargs)
return asyncio.get_event_loop().run_in_executor(None, func_with_kwargs, arg)
#
# IPS()
return wrapped
[docs]
async def main(func, arg_list, **kwargs):
tasks = []
for arg in arg_list:
tasks.append(
func(arg, **kwargs)
)
await tqdm_a.gather(*tasks)
"""
# run this via:
if __name__ == "__main__":
aiot.run(aiot.main(myfunc, myargs))
"""
async_main = main
[docs]
def async_run(func, arg_list, **kwargs):
run(async_main(func, arg_list, **kwargs))