import asyncio
async def do_foo(what):
return what
async def do_bar(what):
return what
async def main(param):
result = asyncio.gather(do_foo(param), do_bar(param))
await result
print(result.result())
asyncio.run(main('123'))
# 我这样写有没有问题, 通过字符串调用函数
async def question(param):
coros = []
funs = ['do_foo', 'do_bar']
for fun in funs:
coros.append(globals()[fun](param))
result = asyncio.gather(*coros)
await result
print(result.result())
asyncio.run(question('123'))
1
ClericPy 2020-04-22 19:05:25 +08:00 1
前期没有大问题, 后期可能会有小问题
从设计角度说, 可以搞一个类专门放方法, 然后使用的时候, getattr(obj, 'string')() |
2
ClericPy 2020-04-22 19:07:48 +08:00
看起来像策略模式
|
3
black11black 2020-04-22 19:11:33 +08:00 1
搞封装不是问题,问题一个是污染全局变量,第二是有些封装方式不适合高可用环境,比如 getattr,还有你的 globals,根据需求自己选实现方法吧。
|
4
ClericPy 2020-04-22 19:12:54 +08:00
上面口误, 看了下代码好像是责任链... 溜了散步去了
|
5
jin7 OP 搞明白我类似代码的 bug 了
|
6
aaronhua 2020-04-27 21:36:21 +08:00
我也是这样搞的,只在入口的地方,通过读取配置调用函数。主要问题是调用不够直观,才一两个人写的项目这个问题不大。
|