用于将基于python的计算封装到可部署和可分发任务中的工具包
werkit的Python项目详细描述
WERKIT
用于将基于python的计算封装到可部署和 可分配任务。
提供有助于打包的代码:
- 序列化结果
- 处理和序列化错误
- 使用Redis、RQ和Fargate CLI
它们对于跨不同的 服务或不同服务的修订。
安装
pip install werkit
用法
fromwerkitimportManagerdefmyfunc(param,verbose=False,handle_exceptions=True):withManager(handle_exceptions=handle_exceptions,verbose=verbose)asmanager:manager.result=do_some_computation()returnmanager.serialized_result
并行计算
werkit支持使用redis和rq进行并行计算。
必须分别安装依赖项:
pip install redis rq
请求工作
frommylibimportmyfuncfromwerkit.parallelimportinvoke_for_eachitems={'a':...,'b':...}job_ids=invoke_for_each(myfunc,items,connection=Redis.from_url(...))
执行工作
pip install redis rq rq worker --burst werkit-default --url rediss://...
注意:mylib.myfunc
必须是可导入的。
使用cloudmanager
代替低级api,您可以使用cloudmanager进行调用:
#!/usr/bin/env pythonimportclickfromwerkit.parallelimportConfig,CloudManager,invoke_for_eachmanager=CloudManager(config=Config(local_repository="my-project",ecr_repository="123456789012.dkr.ecr.us-east-1.amazonaws.com/my-project",ecs_task_name="my-project",task_args=["--cpu","1024","--memory","2048","--task-role","arn:aws:iam::123456789012:role/...","--security-group-id","sg-...","--subnet-id","subnet-...",],default_task_count=5,))@click.group()defcli():pass@cli.command()deflogin():manager.login()@cli.command()@click.argument("tag")defbuild_and_push(tag):manager.build_and_push()@cli.command()defenqueue():frommyprojectimportmyfuncitems={"key1":"value1","key2":"value2"}invoke_for_each(measure_body,items,clean=True,connection=manager.redis_connection,)@cli.command()@click.option("--count",default=manager.config.default_task_count,type=int,help="Number of tasks to run",)@click.argument("tag")defrun(count,tag):manager.run(tag=tag,count=count)@cli.command()defdashboard():manager.dashboard()@cli.command()defps():manager.ps()@cli.command()defget_results():print(manager.get_results())@cli.command()defclean():manager.clean()if__name__=="__main__":cli()
获得结果
fromredisimportRedisfromwerkit.parallelimportget_resultsget_results(wait_until_done=True,connection=Redis.from_url(...))
监测
您可以使用RQ Dashboard或 other methods outlined here。
贡献
拉请求欢迎!
支架
如果你有问题,请告诉我们。
许可证
这个项目是根据麻省理工学院的许可证授权的。