python里使用事件对象asyncio.Event来同步协程

事件对象asyncio.Event是基于threading.Event来实现的。事件可以一个信号触发多个协程同步工作,例子如下:import asyncio import functools def set_event(event): print('setting event in callback') event.set() async def coro1(event):...
阅读(318) 评论(0)

python里协程使用同步锁Lock

尽管asyncio库是使用单线程来实现协程的,但是它还是并发的,乱序执行的。可以说是单线程的调度系统,并且由于执行时有延时或者I/O中断等因素,每个协程如果同步时,还是得使用一些同步对象来实现。比如asyncio就定义了一个锁对象Lock,它一次只允许一个协程来访问共享的资源,如果多协程想访问就会阻塞起来,也就是说如果一个协程没有释放这个锁,别的协程是没有办法访问共享的资源。例子:import a...
阅读(296) 评论(0)

python里怎么实现多个协程一起执行,只要完成一个就返回一个协程

需要使用新的函数as_completed()来实现,可以把多个并发的协程一起给它,但它把返回的结果变成一个生成器,每次返回一个协程的结果,与函数wait()一样,执行协程是乱序的,不会等所有协程执行完成才返回。例子:import asyncio async def phase(i): print('in phase {}'.format(i)) await asyncio.sl...
阅读(273) 评论(0)

python里函数定义的理解

在python里函数定义,与C语言或Java语言的函数定义是不一样的,C语言是定义了一个入口地址,但python语言是定义了一个对象,是一个函数对象。因为函数定义语句是一个执行语句,当python解释器遇到def开头时,就会解析执行def定义的这一行命令,而不是等到调用时才执行,更不像C语言里当调用时才会执行函数定义。python它会在函数定义时就开始把函数名称、局部命名空间,局部命名空间就包含了...
阅读(285) 评论(0)

python里仅收集所有协程执行结果

跟老菜鸟学pythonhttp://edu.csdn.net/course/detail/2592Python游戏开发入门http://edu.csdn.net/course/detail/5690有这么样的一种需求,比如使用多协程来计算加密结果,像这样没有取消任务的需求,也不会出现异常的,可以使用gather()函数来并发运行协程更方便:import asyncio async def ph...
阅读(285) 评论(0)

python里并发执行协程时部分阻塞超时怎么办

Python游戏开发入门http://edu.csdn.net/course/detail/5690跟老菜鸟学pythonhttp://edu.csdn.net/course/detail/2592在前面的例子里学习了并发地执行多个协程来下载图片,也许其中一个协程永远下载不了,一直阻塞,这时怎么办呢?碰到这种需求时不要惊慌,可以使用wait()里的timeout参数来设置等待时间,也就是从这个函数...
阅读(217) 评论(0)

python里创建多个协程并发执行

像前面线性地执行的协程,理解起来非常容易,并且使用关键字await就可以解决了,但是很多情况之下是并发地执行多个协程的,因为常常把任务分解成多个协程运行,比如要从一个网站上下载网页,这时需要下载HTML内容,同时也要下载网页里很多图片的资源,在这种情况之下,就可以把多个图片下载进行并发执行,并且没有顺序运行的关系。在这个例子里使用wait()函数来实现多个协程并发执行,并等待所有协程完成:impo...
阅读(231) 评论(0)

python里把协程变成任务

在这里使用 ensure_future()函数可以把一个协程封装成一个任务,然后这个任务就可以传送给别的代码,不过要注意的是这个函数不会开始执行协程,需要使用关键await才会开始执行:import asyncio async def wrapped(): print('wrapped') return 'result' async def inner(task): ...
阅读(203) 评论(0)

python里创建任务执行一半时取消任务执行

下例子来演示创建任务执行一半时取消任务执行,这时会抛出异常CancelledError,同时也提供了一个机会来删除占用资源等等:import asyncio async def task_func(): print('in task_func, sleeping') try: await asyncio.sleep(1) except asyncio.C...
阅读(196) 评论(0)

python里取消一个未曾执行的任务

python里取消一个未曾执行的任务下面的例子使用create_task()函数来创建一个任务,在未执行任务之前就进行取消:import asyncio async def task_func(): print('in task_func') return 'the result' async def main(loop): print('创建任务') ta...
阅读(193) 评论(0)

python里创建一个任务(Task)

与事件循环进行交互,最基本的方式就是任务,任务封装了协程和自动跟踪它的状态。任务是Future类的子类,所以其它协程可以等待任务完成,或当这些任务完成获取返回结果。在这里通过create_task()函数来创建一个任务实例,然后事件循环就运行这个任务,直到这个任务返回为止:import asyncio async def task_func(): print('in task_func...
阅读(250) 评论(0)

python里使用Future对象进行回调别的函数

Future对象也可以像协程一样,当它设置完成结果时,就可以立即进行回调别的函数,例子如下:import asyncio import functools def callback(future, n): print('{}: future done: {}'.format(n, future.result())) async def register_callbacks(all_...
阅读(308) 评论(0)

python里使用await关键字来等待Future对象完成

在下面的例子里,演示了怎么样使用await来等Future对象设置结果完成,如下:import asyncio def mark_done(future, result): print('setting future result to {!r}'.format(result)) future.set_result(result) async def main(loop):...
阅读(273) 评论(0)

python里使用Future对象来异步返回结果

一个Future是用来表示将来要完成的结果,异步循环可以自动完成对这种对象的状态触发,例子如下:import asyncio def mark_done(future, result): print('setting future result to {!r}'.format(result)) future.set_result(result) event_loop = a...
阅读(329) 评论(0)

python里指定时间调用函数

在前面的例子里,可以使用延时调用,在这里采用指定时间来调用函数,例子如下:import asyncio import time def callback(n, loop): print('callback {} invoked at {}'.format(n, loop.time())) async def main(loop): now = loop.time() ...
阅读(268) 评论(0)
1656条 共111页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:5574816次
    • 积分:72912
    • 等级:
    • 排名:第25名
    • 原创:1584篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2082条
    文章存档
    最新评论