jjzjj

coroutine

全部标签

python - @types.coroutine 和 @asyncio.coroutine 装饰器有什么区别?

文档说:@asyncio.coroutineDecoratortomarkgenerator-basedcoroutines.Thisenablesthegeneratoruseyieldfromtocallasyncdefcoroutines,andalsoenablesthegeneratortobecalledbyasyncdefcoroutines,forinstanceusinganawaitexpression._@types.coroutine(gen_func)Thisfunctiontransformsageneratorfunctionintoacoroutinef

python - 如果 Python 生成器不再使用但尚未达到 StopIteration,它会被垃圾收集吗?

当不再使用生成器时,它应该被垃圾回收,对吧?我尝试了以下代码,但我不确定我错了哪一部分。importweakrefimportgcdefcountdown(n):whilen:yieldnn-=1cd=countdown(10)cdw=weakref.ref(cd)()printcd.next()gc.collect()printcd.next()gc.collect()printcdw.next()在倒数第二行,我调用了垃圾收集器,因为不再调用cd。gc应该释放cd权利。但是当我调用cdw.next()时,它仍然在打印8。我又尝试了几个cdw.next(),它可以成功打印所有剩余的,

python - 如果 Python 生成器不再使用但尚未达到 StopIteration,它会被垃圾收集吗?

当不再使用生成器时,它应该被垃圾回收,对吧?我尝试了以下代码,但我不确定我错了哪一部分。importweakrefimportgcdefcountdown(n):whilen:yieldnn-=1cd=countdown(10)cdw=weakref.ref(cd)()printcd.next()gc.collect()printcd.next()gc.collect()printcdw.next()在倒数第二行,我调用了垃圾收集器,因为不再调用cd。gc应该释放cd权利。但是当我调用cdw.next()时,它仍然在打印8。我又尝试了几个cdw.next(),它可以成功打印所有剩余的,

python - 如何创建一个永远在其上运行滚动协程的事件循环?

为了防止上下文切换,我想创建一个大循环来服务网络连接和一些例程。下面是普通函数的实现:importasyncioimporttimedefhello_world(loop):print('HelloWorld')loop.call_later(1,hello_world,loop)defgood_evening(loop):print('GoodEvening')loop.call_later(1,good_evening,loop)print('step:asyncio.get_event_loop()')loop=asyncio.get_event_loop()print('ste

python - 如何创建一个永远在其上运行滚动协程的事件循环?

为了防止上下文切换,我想创建一个大循环来服务网络连接和一些例程。下面是普通函数的实现:importasyncioimporttimedefhello_world(loop):print('HelloWorld')loop.call_later(1,hello_world,loop)defgood_evening(loop):print('GoodEvening')loop.call_later(1,good_evening,loop)print('step:asyncio.get_event_loop()')loop=asyncio.get_event_loop()print('ste

Python - 如何使用 asyncio 同时运行多个协程?

我正在使用websockets在Python3.4中创建websocket服务器的库。这是一个简单的回显服务器:importasyncioimportwebsockets@asyncio.coroutinedefconnection_handler(websocket,path):whileTrue:msg=yieldfromwebsocket.recv()ifmsgisNone:#connectionlostbreakyieldfromwebsocket.send(msg)start_server=websockets.serve(connection_handler,'localh

Python - 如何使用 asyncio 同时运行多个协程?

我正在使用websockets在Python3.4中创建websocket服务器的库。这是一个简单的回显服务器:importasyncioimportwebsockets@asyncio.coroutinedefconnection_handler(websocket,path):whileTrue:msg=yieldfromwebsocket.recv()ifmsgisNone:#connectionlostbreakyieldfromwebsocket.send(msg)start_server=websockets.serve(connection_handler,'localh

python - "yield from"语法在 asyncio 中有什么作用,它与 "await"有何不同

从编写过asyncio代码但希望更好地理解内部工作原理的人的角度来看,yieldfrom、await是什么以及这些对允许有什么用处异步代码?有一个highlyupvoted关于yieldfrom语法和oneexplainingasyncandawait用法的问题,但两者都深入探讨了不同的主题,并没有真正简明地解释底层代码以及它如何适应asyncio。 最佳答案 简答:yieldfrom是等待asyncio协程的老方法。await是一种等待asyncio协程的现代方式。详细回答:Python有生成器——一种特殊的函数,可以生成一系列结

python - "yield from"语法在 asyncio 中有什么作用,它与 "await"有何不同

从编写过asyncio代码但希望更好地理解内部工作原理的人的角度来看,yieldfrom、await是什么以及这些对允许有什么用处异步代码?有一个highlyupvoted关于yieldfrom语法和oneexplainingasyncandawait用法的问题,但两者都深入探讨了不同的主题,并没有真正简明地解释底层代码以及它如何适应asyncio。 最佳答案 简答:yieldfrom是等待asyncio协程的老方法。await是一种等待asyncio协程的现代方式。详细回答:Python有生成器——一种特殊的函数,可以生成一系列结

python - 测试函数或方法是正常还是异步

如何确定函数或方法是普通函数还是异步函数?我希望我的代码能够自动支持正常或异步回调,并且需要一种方法来测试传递的函数类型。asyncdefexampleAsyncCb():passdefexampleNomralCb():passdefisAsync(someFunc):#docooldynamicpythonstuffonthefunctionreturnTrue/FalseasyncdefcallCallback(cb,arg):ifisAsync(cb):awaitcb(arg)else:cb(arg)根据传递的函数类型,它应该正常运行还是等待。我尝试了各种方法,但不知道如何实现