Python中异步程序编写时候多次循坏问题总结

问题:

在《每日一课》Python入门之异步IO中,存在着这样一个问题,代码如下:

import asyncio

@asyncio.coroutine
def hello():
    print("Hello world!")
    # 异步调用asyncio.sleep(1):
    r = yield from asyncio.sleep(1)
    print("Hello again!")

# 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()

这个程序是没有问题的,但是当我们第二次使用loop的时候程序就会抛出异常RuntimeError: Event loop is closed,这也是有一定道理的,我们理想当中的的情况也应该是在一个时间循环中解决掉各种异步IO的问题。但是因为我们是处于练习写程序、学习的状态,所以每次如果总是要重启终端再来编写程序进行练习的话,确实过于麻烦了,所以现在就介绍一种解决方法(当然方法很多的,各有各的不同)

方法:

可以使用asyncio.new_event_loop函数建立一个新的事件循环,这时候就可以多次运行异步的事件循环了。

结果:

上面的代码可以修改如下:

import asyncio

@asyncio.coroutine
def hello():
    print("Hello world!")
    # 异步调用asyncio.sleep(1):
    r = yield from asyncio.sleep(1)
    print("Hello again!")
    
def runEventLoop():
    loop = asyncio.new_event_loop()
    #asyncio.set_event_loop(loop)
    loop.run_until_complete(hello())
    loop.close()
    
runEventLoop()
这样就可以对代码进行自己想要的修改,而且可以反复执行并不会抛出异常: RuntimeError: Event loop is closed


猜你喜欢

转载自blog.csdn.net/qq_19924321/article/details/79638477