问题
问题摘要
当我在写一段需要高性能同时运行的代码时出现了一个奇怪的现象,及当我加上一个未被调用的函数时执行时间发生了变化,在Pycharm中变慢了,在命令行中变快了
示例代码放在 这里 ,其中包含了在google colab上的运行时间
问题代码
初始代码
1 | def main2(): |
改动后代码
1 | def main(): |
解决
首先先展示一下正确的代码写法
修正代码
1 | def main3(): |
原因
f3函数并不支持协程调用,或者说与asyncio不能很好的兼容工作,使得代码的行为不可控制.
查看官方网站后发现一个专门用来处理这种函数的方法 run_in_executor , 当使用这个后,f1,f3是同步运行的
参考资料
官方资料:Handle blocking functions correctly
一个解释syncio的很好的博客:Python黑魔法 — 异步IO( asyncio) 协程