第一个问题是:若何注册我们想监听的事宜?很简单,把事宜加到 events_to_listen 里就可以了。第二个问题,可以监听什么事宜?因为 process_events 须要操作体系的支撑,那么我们想监听的事宜是须要操作体系支撑才行的,一般操作体系支撑收集 I/O 的文件描述符 (file descriptor)。
register_event 用到注册 事宜: 回调 的关系, start_loop 用于开启事宜轮回。
如今,你不是想说,之前提到过事宜也包含“某个急鹞鲼归零了”,但 poll_events 只支撑收集 I/O 的文件描述符,急鹞鲼又要若何实现呢?一般 poll_events 函数是支撑 timeout 参数表示等待的时光。是以,可以修改 start_loop :
- def call_later(self, delay, callback):
- self.call_at(now() + delay, callback)
- def call_at(self, when, callback):
- self.timeout_callbacks[when] = callback
- def start_loop(self):
- while True:
- timeout = min(self.timeout_callbacks.keys()) - now()
- events_happend = poll_events(self.events_to_listen, timeout)
- if not empty(events_happend):
- self._process_events(events_happend)
- self._process_timeout_events()
- def _process_timeout_events(self):
- time_now = now()
- for time, callback in self.timeout_callbacks.iteritems():
- if time < time_now:
- callback()
- del self.timeout_callbacks[time]
于是一个简单的 event loop 就完成了。可以看到,它是异步操作的基本:许可等待某个事宜的产生并履行响应的操作。同时,它照样个简单的调剂器,能次序地履行产闹事宜的回调函数。
Callback vs Promise vs await
好了,如今我们有了 event loop ,它许可我们为事宜注册回调函数。如今假设我们要次序调用几个 API, 用壅塞式编程如下:
- result1 = api1()
- result2 = api2(result1)
- result3 = api3(result2)
- ...
如不雅这几个 API 都是异步的,用 event loop + callback 怎么实现?
- # Implementation for api
- def api1(callback):
- def callback_for_api1():
- result1 = some_calculation_1()
- event_loop.unregister_event(event1)
- return callback(result1)
- event_loop.register_event(event1, callback_for_api1)
- def api2(result, callback):
- def callback_for_api2():
- result2 = some_calculation_2(result)
- event_loop.unregister_event(event2)
- return callback(result2)
- event_loop.register_event(event2, callback_for_api2)
- ...
- # Our code
- global result
- def api1_callback(result1):
- def api2_callback(result2):
- def api3_callback(result3):
- global
推荐阅读
Android必知必会-使用Intent打开第三方应用及验证可用性
基本常识此方法多用于启动体系中的功能性应用,比如打德律风、发邮件、预览图片、应用默认浏览器打开一个网页等。1. App 的人口 Activity 与其 icon一个通俗的应用默认会有一小我口 Activ>>>详细阅读
地址:http://www.17bianji.com/lsqh/37131.html
1/2 1