Jupyter中asyncio.run() cannot be called from a running event loop问题解决

Jupyter中asyncio.run() cannot be called from a running event loop问题解决,第1张

这种写法在jupyter中报错。

搜索之后发现是:

大致就是jupyter 已经运行了loop,无需自己激活,采用上文中的await()调用即可

正确的写法如下:

asyncio是官方提供的协程的类库,从python3.4开始支持该模块

async &awiat是python3.5中引入的关键字,使用async关键字可以将一个函数定义为协程函数,使用awiat关键字可以在遇到IO的时候挂起当前协程(也就是任务),去执行其他协程。

await + 可等待的对象(协程对象、Future对象、Task对象 ->IO等待)

注意:在python3.4中是通过asyncio装饰器定义协程,在python3.8中已经移除了asyncio装饰器。

事件循环,可以把他当做是一个while循环,这个while循环在周期性的运行并执行一些协程(任务),在特定条件下终止循环。

loop = asyncio.get_event_loop():生成一个事件循环

loop.run_until_complete(任务):将任务放到事件循环

Tasks用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。除了使用 asyncio.create_task() 函数以外,还可以用低层级的 loop.create_task() 或 ensure_future() 函数。不建议手动实例化 Task 对象。

本质上是将协程对象封装成task对象,并将协程立即加入事件循环,同时追踪协程的状态。

注意:asyncio.create_task() 函数在 Python 3.7 中被加入。在 Python 3.7 之前,可以改用 asyncio.ensure_future() 函数。

下面结合async &awiat、事件循环和Task看一个示例

示例一:

*注意:python 3.7以后增加了asyncio.run(协程对象),效果等同于loop = asyncio.get_event_loop(),loop.run_until_complete(协程对象) *

示例二:

注意:asyncio.wait 源码内部会对列表中的每个协程执行ensure_future从而封装为Task对象,所以在和wait配合使用时task_list的值为[func(),func()] 也是可以的。

示例三:

python多个eventloop报错

你所定义的list node class和python自带的list type是不同的东西,不能通用,必须先转换

其他小错我直接帮你改掉了

下面是改好可以运行的代码:

class ListNode(object):def __init__(self,val):self.val = valself.next = Nonedef __repr__(self):return str(self.val) def LinkedList(pythonlist):l = ListNode(pythonlist[0])c = lfor i in range(1,len(pythonlist)):l.next = ListNode(pythonlist[i])l = l.nextreturn c def PythonList(ListNode):l = []while ListNode != None:l.append(ListNode.val)ListNode = ListNode.nextreturn l class Solution(object):def mergeTwoLists(self,l1,l2):if l1 is None:return l2if l2 is None:return l1 dummyhead=ListNode(0)dummyhead.next=Nonep=dummyheadwhile l1 is not None and l2 is not None:if l1.val(LinkedList(pythonlist) 方法把一个传统的python list转换成你用的首位相衔的listnode 形式,PythonList(ListNode) 则是转换回来) 同时,linkedlist的数据类型在c里面比较常用,python里面一般用不着这么麻烦 希望对你有帮助


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11946621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存