2024-05-19 03:05:43 发布
网友
我是这个框架的新手,我试图理解使用其中一个框架的区别/好处
我可以使用一个非异步函数,它不是一个协同例程
def while_naughty(): print("naughty") loop.call_soon(self.while_naughty)
或者
我知道确保future以一个co-routine作为参数,我希望了解使用call_soon()比使用ensure_future()更有利的情况。在
call_soon()
ensure_future()
非协同程序版本永远不会协同工作。您不能await处理该函数中的任何其他内容,并且由于您调用它的方式,您无法将结果返回给调用方。在
await
loop.call_soon()专门用于回调,回调通常是非常简单的函数,用于钩住事件(作业完成、将来引发异常等),它们不需要合作。在
loop.call_soon()
回调也不需要返回任何内容;它们是fire-and-forget例程,被信任不会通过运行任何重的或阻塞的东西来锁定整个系统。call_soon()返回一个^{} instance,它只允许您再次取消它(如果已经执行了,则返回no-op)。回调将在下次事件循环检查回调队列时执行,此时它们(希望是短暂的)阻止任何其他工作的执行*。在
注意,asyncio.ensure_future()只创建一个Future()实例,任务实际上并没有启动!但是如果你真的启动了它(比如说,^{}),你会得到更多的控制。你现在有了正确的协同计划,它可以在其他协同计划中等待。等待其他协程可以让事件循环切换到其他准备好继续的协程,确保您的CPU在有工作要做时忙于执行实际工作。你的协同程序也可以向调用者返回实际结果。在
asyncio.ensure_future()
Future()
使用哪个更适合您的用例。在大型应用程序中,您可能会同时使用这两种方法。在
*当您run in debug mode时,您会被告知回调时间过长,因此您可以调试这些。在
非协同程序版本永远不会协同工作。您不能
await
处理该函数中的任何其他内容,并且由于您调用它的方式,您无法将结果返回给调用方。在loop.call_soon()
专门用于回调,回调通常是非常简单的函数,用于钩住事件(作业完成、将来引发异常等),它们不需要合作。在回调也不需要返回任何内容;它们是fire-and-forget例程,被信任不会通过运行任何重的或阻塞的东西来锁定整个系统。} instance ,它只允许您再次取消它(如果已经执行了,则返回no-op)。回调将在下次事件循环检查回调队列时执行,此时它们(希望是短暂的)阻止任何其他工作的执行*。在
call_soon()
返回一个^{注意,} ),你会得到更多的控制。你现在有了正确的协同计划,它可以在其他协同计划中等待。等待其他协程可以让事件循环切换到其他准备好继续的协程,确保您的CPU在有工作要做时忙于执行实际工作。你的协同程序也可以向调用者返回实际结果。在
asyncio.ensure_future()
只创建一个Future()
实例,任务实际上并没有启动!但是如果你真的启动了它(比如说,^{使用哪个更适合您的用例。在大型应用程序中,您可能会同时使用这两种方法。在
*当您run in debug mode时,您会被告知回调时间过长,因此您可以调试这些。在
相关问题 更多 >
编程相关推荐