资讯专栏INFORMATION COLUMN

[Python]在一段Python程序中使用多次事件循环

dreamtecher / 2199人阅读

摘要:解决方案我们可以使用函数建立一个新的事件循环,并使用设置全局的事件循环,这时候就可以多次运行异步的事件循环了,不过最好保存默认的并在事件循环结束的时候还原回去。

背景

我们在Python异步程序编写中经常要用到如下的结构

import asyncio
async def doAsync():
    await asyncio.sleep(0)
    #...
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(doAsync())
    loop.close()

这当然是很不错的,但当你第二次使用loop的时候程序就会抛出异常RuntimeError: Event loop is closed,这也无可厚非,理想的程序也应该是在一个时间循环中解决掉各种异步IO的问题。
但放在终端环境如Ipython中,如果想要练习Python的异步程序的编写的话每次都要重新开启终端未免太过于麻烦,这时候要探寻有没有更好的解决方案。

解决方案

我们可以使用asyncio.new_event_loop函数建立一个新的事件循环,并使用asyncio.set_event_loop设置全局的事件循环,这时候就可以多次运行异步的事件循环了,不过最好保存默认的asyncio.get_event_loop并在事件循环结束的时候还原回去。
最终我们的代码就像这样。

代码
import asyncio
async def doAsync():
    await asyncio.sleep(0)
    #...
def runEventLoop()
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(doAsync())
    loop.close()
if __name__ == "__main__":
    oldloop = asyncio.get_event_loop()
    runEventLoop()
    runEventLoop()
    asyncio.set_event_loop(oldloop)
感想

事件循环本来就是要一起做很多事情,在正式的Python代码中还是只用一个默认的事件循环比较好,平时的学习练习的话倒是随意了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40805.html

相关文章

  • [零基础学python]用while来循环

    摘要:我在这里将他写的程序恭录于此,单元李航同学不要见怪,如果李航同学认为此举侵犯了自己的知识产权,可以告知我,我马上撤下此代码。我用的是,在输入指令上区别于李同学程序用变量接收了输入的内容。 while,翻译成中文是当...的时候,这个单词在英语中,常常用来做为时间状语,while ... someone do somthing,这种类型的说法是有的。在python中,它也有这个含义,不过...

    Tony 评论0 收藏0
  • python并发2:使用asyncio处理并发

    摘要:是之后引入的标准库的,这个包使用事件循环驱动的协程实现并发。没有能从外部终止线程,因为线程随时可能被中断。上一篇并发使用处理并发我们介绍过的,在中,只是调度执行某物的结果。 asyncio asyncio 是Python3.4 之后引入的标准库的,这个包使用事件循环驱动的协程实现并发。asyncio 包在引入标准库之前代号 Tulip(郁金香),所以在网上搜索资料时,会经常看到这种花的...

    wushuiyong 评论0 收藏0
  • python入门,编程基础概念介绍(变量,条件,函数,循环

    摘要:该系列文章入门,编程基础概念介绍变量,条件,函数,循环中的数据类型,,,,在中创建对象学一门编程语言正在变得越来越容易,只要念过高中甚至是初中小学,能熟练聊和懂得一点点软件的人,入门一门编程语言都不在话下。 该系列文章: 《python入门,编程基础概念介绍(变量,条件,函数,循环)》 《python中的数据类型(list,tuple,dict,set,None)》 《在python...

    Bryan 评论0 收藏0
  • 谈谈Python协程技术的演进

    摘要:事件循环是异步编程的底层基石。对事件集合进行轮询,调用回调函数等一轮事件循环结束,循环往复。协程直接利用代码的执行位置来表示状态,而回调则是维护了一堆数据结构来处理状态。时代的协程技术主要是,另一个比较小众。 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq。 引言 1.1. 存储器山 存储器山是 Randal Bryant 在《深入...

    zhiwei 评论0 收藏0
  • [零基础学Python]做一个小游戏

    摘要:在讲述有关的时候,提到做游戏的事情后来这个事情一直没有接续。现在就是开始做那个游戏的时候了。游戏过程描述程序运行起来,随机在某个范围内选择一个整数。我们现在做一个很小的程序,也是这样来做。这个游戏还没有完呢,即使用了循环,后面还会继续。 在讲述有关list的时候,提到做游戏的事情,后来这个事情一直没有接续。不是忘记了,是在想在哪个阶段做最合适。经过一段时间学习,看官已经不是纯粹小白了,...

    idisfkj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<