我已经研究了几天asyncio模块/功能,因为我想将其用于我的应用程序的IO绑定部分,我认为我现在已经对它的工作原理有了合理的理解,或者至少我认为我已经理解了以下内容:
基于以上考虑,我一直在努力思考如何在后台运行我的异步代码,同时在前台执行其他(同步)工作,我也在谷歌上搜索了很多,发现很多人有同样的问题,但没有多少人有好的解决方案,而不是任何我满意的解决方案
所以现在我的问题是;Spyder IDE是如何做到的?
我正在使用Spyder IDE,发现Spyder运行自己的asyncio事件循环,不仅如此,您还可以直接在交互式python控制台中定义和运行异步函数,只需执行以下操作:
In [1]: async def my_printer():
...: print('hello world')
...:
In [2]: asyncio.run_coroutine_threadsafe(my_printer(), asyncio.get_event_loop())
hello world
所以我想“我想知道我在Spyder终端中键入的代码实际上是在哪个线程中执行的”,所以我试着:
In [3]: import threading
In [4]: threading.current_thread()
<_MainThread(MainThread, started 9756)>
…然后当我尝试时,我的困惑变得更大
In [5]: async def get_thread():
...: return threading.current_thread()
...:
In [6]: res = asyncio.run_coroutine_threadsafe(get_thread(), asyncio.get_event_loop())
In [7]: res.result()
<_MainThread(MainThread, started 9756)>
这到底是怎么回事
我不明白Spyder如何在主线程中运行asyncio事件循环,同时仍然允许我在同一线程中运行同步代码。我的理解是否不正确/我是否遗漏了异步IO的工作原理?还是Spyder在幕后雇佣了一些邪恶的黑客使其工作
我主要对此感兴趣,因为我希望它能帮助我理解同步和异步代码是如何协同工作的,因为它可能会进一步加深我对异步IO的理解
目前没有回答
相关问题 更多 >
编程相关推荐