@
BingoXuan 其实 python 的 async IO 现在已经得到很大的改善了,现在最起码用起来比以前方便很多了。
我这个例子不知道能不能说明你的难处,关于将同步函数包装成异步函数执行。
```python
from http import client
from urllib import request as url_request
import time
import asyncio
URL = '
http://opendata2.epa.gov.tw/AQI.json'async def a_open_url(url: str) -> str:
loop = asyncio.get_event_loop()
print('------')
rst: client.HTTPResponse = await loop.run_in_executor(
None,
url_request.urlopen, url
)
return rst.read().decode('utf8')
async def main() -> None:
start = time.time()
request_time = 4
rst = await asyncio.gather(*[a_open_url(URL) for _ in range(request_time)])
print([len(r) for r in rst])
print('spend time:', time.time()-start)
if __name__ == '__main__':
asyncio.run(main())
```
类型系统的话,说实在的我还没体会到有啥不便之处,配合 mypy 的类型检查,还有 flake8 的语法检查也是够用。基本我没有遇上无法类型注释的情况。
复杂的匿名函数感觉这个应该和 python 的设计理念冲突吧,因为本来就是靠缩进来区分层级的,所以精简表达很重要,如果加入复杂的匿名函数就会增加代码的复杂维度,纯个人看法。
最后关于 python 的 gui 编程,我还是先选择其他语言了,至于用 web 的技术去开发桌面 UI 其实用 python 本身的意义就不太大了,因为有更多更成熟,更靠谱的前端技术栈。哎,不过还是会作为我的最佳储备语言了,哪天好起来了还是会快速捡起来的。