Asyncio

Asyncio

1. Base Event Loop

  • BaseEventLoop类

    不应该被直接调用或被放在第三方包中调用(使用AEL代替),BEL属于AbstractEventLoop

  • AbstractEventLoop类

    抽象的基类,非线程安全

1.1 Run an event loop

1.1.1 AbstractEventLoop.run_forever()

会一直运行直到stop()方法触发

1.1.2 AbstractEventLoop.run_until_complete(future)

会一直运行直到Future运行结束,如果是一个协程对象,就会被ensure_future()来装饰.

会返回Future的结果,或者报错

1.1.3 AbstractEventLoop.is_running()

返回event_loop的运行状态

1.1.4 AbstractEventLoop.stop()[3.5.1新增]

会终止run_forever()

在一个合适的时机:

If stop() is called while run_forever() is running, this will run the current batch of callbacks and then exit. Note that callbacks scheduled by callbacks will not run in that case; they will run the next time run_forever() is called.Changed in version 3.5.1.

1.1.5 AbstractEventLoop.is_closed()

3.4.2新增方法 如果event loop被关闭了 返回True

1.1.6 AbstractEventLoop.close()

彻底关闭, 这个方法会清除掉executor,并且不会像stop一样在恰当时机关闭 而是直接关闭

不可逆

1.1.7 AbstractEventLoop.shutdown_asyncgens()[coroutine ]

3.6新增方法

try:    
    loop.run_forever()
finally:
    loop.run_until_complete(loop.shutdown_asyncgens()) 

1.2 Calls | 调用

大部分异步函数不接受多个参数,所以调用的时候 用functools.partial偏函数来装饰

  • 注意: partial函数要比lambda表达式要好,因为asyncio包可以识别partial里面的对象并在debug的时候展示,而lambda则不行

1.2.1 AbstractEventLoop.call_soon(callback, *args)

这是一个先进先出的(按注册顺序)队列

返回asyncio.Handle() 用于控制callback

1.2.2 AbstractEventLoop.call_soon(callback, *args)

和1.2.1一样 只不过是线程安全的

1.3 Delayed calls | 延时调用

event loop有他内在的时钟来计算超时[不过 这个延时不能超过一天]

1.3.1 AbstractEventLoop.call_later(delay, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.2 AbstractEventLoop.call_at(when, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.3 AbstractEventLoop.time()

返回当前时间,是一个float值(这个是由eventloop的内部时钟给出的)

  • asyncio.sleep()方法也用到了这个eventloop的时钟

1.4 Futures

1.4.1 AbstractEventLoop.create_future()

创建asyncio.Future对象 这个是在asyncio里面创建Future的推荐方法 3.5.2新增方法

1.5. Tasks

1.5.1 AbstractEventLoop.create_task(coro)

设定协程对象的执行,用future包裹他,返回一个Task对象

第三方包的event_loop可能有他们自己定义的task,但是必须是Task类的子集

3.4.2新增的

1.5.2 AbstractEventLoop.set_task_factory(factory)

如果factory是None, 就会使用默认的

如果factory是可调用的,需要有一个(loop,coro)的签名[loop是当前运行的event_loop,coro是一个协程对象 这个可以调用的对象一定要返回一个asyncio.Future对象

3.4.4新增

1.5.3 AbstractEventLoop.get_task_factory()

返回当前的task_factory,如果是默认的task_factory类型,就会返回None

3.4.4新增

1.6 Creating connections

1.6.1 (coroutine) AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, ssl=None, family=0, proto=0, flags=0,sock=None, local_addr=None, server_hostname=None)

1.6.2 (coroutine) AbstractEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None)

1.6.3 (coroutine) AbstractEventLoop.create_unix_connection(protocol_factory, path,ssl=None, sock=None, server_hostname=None)

1.7 Creating listening connections

1.7.1 coroutine AbstractEventLoop.create_server(protocol_factory, host=None, port=None,family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None)

1.7.2 coroutine AbstractEventLoop.create_unix_server(protocol_factory, path=None,sock=None, backlog=100, ssl=None)

1.7.3 coroutine BaseEventLoop.connect_accepted_socket(protocol_factory, sock, ssl=None)

1.8 Watch file descriptors

1.8.1 AbstractEventLoop.add_reader(fd, callback, args)

1.8.2 AbstractEventLoop.remove_reader(fd)

1.8.3 AbstractEventLoop.add_writer(fd, callback, args)

1.8.4 AbstractEventLoop.remove_writer(fd)

2. Event loops

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容