作家
登录

理解Python asyncio内部实现机制

作者: 来源: 2017-09-05 08:58:59 阅读 我要评论

  • loop.start_loop() 
  • 第一个问题是:若何注册我们想监听的事宜?很简单,把事宜加到 events_to_listen 里就可以了。第二个问题,可以监听什么事宜?因为 process_events 须要操作体系的支撑,那么我们想监听的事宜是须要操作体系支撑才行的,一般操作体系支撑收集 I/O 的文件描述符 (file descriptor)。

    register_event 用到注册 事宜: 回调 的关系, start_loop 用于开启事宜轮回。

    如今,你不是想说,之前提到过事宜也包含“某个急鹞鲼归零了”,但 poll_events 只支撑收集 I/O 的文件描述符,急鹞鲼又要若何实现呢?一般 poll_events 函数是支撑 timeout 参数表示等待的时光。是以,可以修改 start_loop :

    1. def call_later(self, delay, callback): 
    2.  self.call_at(now() + delay, callback) 
    3.  
    4. def call_at(self, when, callback): 
    5.  self.timeout_callbacks[when] = callback 
    6.  
    7. def start_loop(self): 
    8.  while True
    9.  timeout = min(self.timeout_callbacks.keys()) - now() 
    10.  events_happend = poll_events(self.events_to_listen, timeout) 
    11.  if not empty(events_happend): 
    12.  self._process_events(events_happend) 
    13.  self._process_timeout_events() 
    14.  
    15. def _process_timeout_events(self): 
    16.  time_now = now() 
    17.  for time, callback in self.timeout_callbacks.iteritems(): 
    18.  if time < time_now: 
    19.  callback() 
    20.  del self.timeout_callbacks[time

    于是一个简单的 event loop 就完成了。可以看到,它是异步操作的基本:许可等待某个事宜的产生并履行响应的操作。同时,它照样个简单的调剂器,能次序地履行产闹事宜的回调函数。

    Callback vs Promise vs await

    好了,如今我们有了 event loop ,它许可我们为事宜注册回调函数。如今假设我们要次序调用几个 API, 用壅塞式编程如下:

    1. result1 = api1() 
    2. result2 = api2(result1) 
    3. result3 = api3(result2) 
    4. ... 

    如不雅这几个 API 都是异步的,用 event loop + callback 怎么实现?

    1. # Implementation for api 
    2. def api1(callback): 
    3.  def callback_for_api1(): 
    4.  result1 = some_calculation_1() 
    5.  event_loop.unregister_event(event1) 
    6.  return callback(result1) 
    7.  event_loop.register_event(event1, callback_for_api1) 
    8.  
    9. def api2(result, callback): 
    10.  def callback_for_api2(): 
    11.  result2 = some_calculation_2(result) 
    12.  event_loop.unregister_event(event2) 
    13.  return callback(result2) 
    14.  event_loop.register_event(event2, callback_for_api2) 
    15. ... 
    16.  
    17. # Our code 
    18. global result 
    19. def api1_callback(result1): 
    20.  def api2_callback(result2): 
    21.  def api3_callback(result3): 
    22.  global

        推荐阅读

        Android必知必会-使用Intent打开第三方应用及验证可用性

      基本常识此方法多用于启动体系中的功能性应用,比如打德律风、发邮件、预览图片、应用默认浏览器打开一个网页等。1. App 的人口 Activity 与其 icon一个通俗的应用默认会有一小我口 Activ>>>详细阅读


      本文标题:理解Python asyncio内部实现机制

      地址:http://www.17bianji.com/lsqh/37131.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)