|
1 | | ---- base_events_original.py 2024-10-07 10:26:48.000000000 +0800 |
2 | | -+++ base_events_patched.py 2025-03-18 01:00:23.045485200 +0800 |
3 | | -@@ -2050,3 +2050,48 @@ |
4 | | - |
5 | | - if self.is_running(): |
6 | | - self.call_soon_threadsafe(self._set_coroutine_origin_tracking, enabled) |
7 | | -+ |
8 | | -+ def poll_events(self): |
9 | | -+ """轮询I/O事件但不处理它们""" |
10 | | -+ # 计算超时时间 - 保留动态超时计算 |
11 | | -+ timeout = None |
12 | | -+ if self._ready or self._stopping: |
13 | | -+ timeout = 0 |
14 | | -+ elif self._scheduled: |
15 | | -+ # 计算所需的超时时间 |
16 | | -+ timeout = self._scheduled[0]._when - self.time() |
17 | | -+ if timeout > MAXIMUM_SELECT_TIMEOUT: |
18 | | -+ timeout = MAXIMUM_SELECT_TIMEOUT |
19 | | -+ elif timeout < 0: |
20 | | -+ timeout = 0 |
21 | | -+ |
22 | | -+ # 执行实际的轮询操作 |
23 | | -+ try: |
24 | | -+ return self._selector.select(timeout) |
25 | | -+ except: |
26 | | -+ return [] |
27 | | -+ |
28 | | -+ def process_events(self, events): |
29 | | -+ """处理轮询到的I/O事件""" |
30 | | -+ if events: |
31 | | -+ self._process_events(events) |
32 | | -+ |
33 | | -+ def process_ready(self): |
34 | | -+ """处理到期的定时器和执行就绪的回调""" |
35 | | -+ # 处理已过期的计时器 |
36 | | -+ end_time = self.time() + self._clock_resolution |
37 | | -+ while self._scheduled: |
38 | | -+ handle = self._scheduled[0] |
39 | | -+ if handle._when >= end_time: |
40 | | -+ break |
41 | | -+ handle = heapq.heappop(self._scheduled) |
42 | | -+ handle._scheduled = False |
43 | | -+ if not handle._cancelled: |
44 | | -+ self._ready.append(handle) |
45 | | -+ |
46 | | -+ # 执行就绪的回调 |
47 | | -+ ntodo = len(self._ready) |
48 | | -+ for i in range(ntodo): |
49 | | -+ handle = self._ready.popleft() |
50 | | -+ if not handle._cancelled: |
51 | | -+ handle._run() |
| 1 | +*** base_events_original.py 2025-04-03 00:11:41.962098300 +0800 |
| 2 | +--- base_events_patched.py 2025-04-05 10:09:51.634970800 +0800 |
| 3 | +*************** |
| 4 | +*** 2050,2052 **** |
| 5 | +--- 2050,2095 ---- |
| 6 | + |
| 7 | + if self.is_running(): |
| 8 | + self.call_soon_threadsafe(self._set_coroutine_origin_tracking, enabled) |
| 9 | ++ |
| 10 | ++ def poll_events(self): |
| 11 | ++ """轮询I/O事件但不处理它们""" |
| 12 | ++ # 计算超时时间 - 保留动态超时计算 |
| 13 | ++ timeout = None |
| 14 | ++ if self._ready or self._stopping: |
| 15 | ++ timeout = 0 |
| 16 | ++ elif self._scheduled: |
| 17 | ++ # 计算所需的超时时间 |
| 18 | ++ timeout = self._scheduled[0]._when - self.time() |
| 19 | ++ if timeout > MAXIMUM_SELECT_TIMEOUT: |
| 20 | ++ timeout = MAXIMUM_SELECT_TIMEOUT |
| 21 | ++ elif timeout < 0: |
| 22 | ++ timeout = 0 |
| 23 | ++ |
| 24 | ++ # 执行实际的轮询操作 |
| 25 | ++ try: |
| 26 | ++ return self._selector.select(timeout) |
| 27 | ++ except: |
| 28 | ++ return [] |
| 29 | ++ |
| 30 | ++ def process_events(self, events): |
| 31 | ++ """处理轮询到的I/O事件""" |
| 32 | ++ if events: |
| 33 | ++ self._process_events(events) |
| 34 | ++ |
| 35 | ++ def process_ready(self): |
| 36 | ++ """处理到期的定时器和执行就绪的回调""" |
| 37 | ++ # 处理已过期的计时器 |
| 38 | ++ end_time = self.time() + self._clock_resolution |
| 39 | ++ while self._scheduled: |
| 40 | ++ handle = self._scheduled[0] |
| 41 | ++ if handle._when >= end_time: |
| 42 | ++ break |
| 43 | ++ handle = heapq.heappop(self._scheduled) |
| 44 | ++ handle._scheduled = False |
| 45 | ++ if not handle._cancelled: |
| 46 | ++ self._ready.append(handle) |
| 47 | ++ |
| 48 | ++ while self._ready: |
| 49 | ++ handle = self._ready.popleft() |
| 50 | ++ if not handle._cancelled: |
| 51 | ++ handle._run() |
0 commit comments