|
rdobuilder |
0a9e34 |
From e939a82ae8a1617a821547060e7a581492adda01 Mon Sep 17 00:00:00 2001
|
|
rdobuilder |
0a9e34 |
From: =?UTF-8?q?S=C3=BCmer=20Cip?= <sumer.cip@platform.sh>
|
|
rdobuilder |
0a9e34 |
Date: Tue, 2 Aug 2022 11:27:29 +0300
|
|
rdobuilder |
0a9e34 |
Subject: [PATCH 01/11] Change frame object + update asyncio tests
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
---
|
|
rdobuilder |
0a9e34 |
tests/test_asyncio.py | 53 ++++++++++++++++++-------------------------
|
|
rdobuilder |
0a9e34 |
yappi/_yappi.c | 21 +++++++++++++----
|
|
rdobuilder |
0a9e34 |
yappi/timing.c | 3 +--
|
|
rdobuilder |
0a9e34 |
3 files changed, 39 insertions(+), 38 deletions(-)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
diff --git a/tests/test_asyncio.py b/tests/test_asyncio.py
|
|
rdobuilder |
0a9e34 |
index b547674..8e9e631 100644
|
|
rdobuilder |
0a9e34 |
--- a/tests/test_asyncio.py
|
|
rdobuilder |
0a9e34 |
+++ b/tests/test_asyncio.py
|
|
rdobuilder |
0a9e34 |
@@ -5,20 +5,18 @@ import threading
|
|
rdobuilder |
0a9e34 |
from utils import YappiUnitTestCase, find_stat_by_name, burn_cpu, burn_io
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
-@asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
-def async_sleep(sec):
|
|
rdobuilder |
0a9e34 |
- yield from asyncio.sleep(sec)
|
|
rdobuilder |
0a9e34 |
+async def async_sleep(sec):
|
|
rdobuilder |
0a9e34 |
+ await asyncio.sleep(sec)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
class SingleThreadTests(YappiUnitTestCase):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
def test_issue58(self):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def mt(d):
|
|
rdobuilder |
0a9e34 |
+ async def mt(d):
|
|
rdobuilder |
0a9e34 |
t = asyncio.Task(async_sleep(3 + d))
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(3)
|
|
rdobuilder |
0a9e34 |
- yield from t
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(3)
|
|
rdobuilder |
0a9e34 |
+ await t
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
yappi.set_clock_type('wall')
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
@@ -41,14 +39,13 @@ class SingleThreadTests(YappiUnitTestCase):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
def test_recursive_coroutine(self):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def a(n):
|
|
rdobuilder |
0a9e34 |
+ async def a(n):
|
|
rdobuilder |
0a9e34 |
if n <= 0:
|
|
rdobuilder |
0a9e34 |
return
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
burn_cpu(0.1)
|
|
rdobuilder |
0a9e34 |
- yield from a(n - 1)
|
|
rdobuilder |
0a9e34 |
- yield from a(n - 2)
|
|
rdobuilder |
0a9e34 |
+ await a(n - 1)
|
|
rdobuilder |
0a9e34 |
+ await a(n - 2)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
yappi.set_clock_type("cpu")
|
|
rdobuilder |
0a9e34 |
yappi.start()
|
|
rdobuilder |
0a9e34 |
@@ -65,13 +62,12 @@ class SingleThreadTests(YappiUnitTestCase):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
def test_basic_old_style(self):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def a():
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
+ async def a():
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
burn_io(0.1)
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
burn_io(0.1)
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.1)
|
|
rdobuilder |
0a9e34 |
burn_cpu(0.3)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
yappi.set_clock_type("wall")
|
|
rdobuilder |
0a9e34 |
@@ -111,22 +107,19 @@ class MultiThreadTests(YappiUnitTestCase):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
def test_basic(self):
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def a():
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.3)
|
|
rdobuilder |
0a9e34 |
+ async def a():
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.3)
|
|
rdobuilder |
0a9e34 |
burn_cpu(0.4)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def b():
|
|
rdobuilder |
0a9e34 |
- yield from a()
|
|
rdobuilder |
0a9e34 |
+ async def b():
|
|
rdobuilder |
0a9e34 |
+ await a()
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def recursive_a(n):
|
|
rdobuilder |
0a9e34 |
+ async def recursive_a(n):
|
|
rdobuilder |
0a9e34 |
if not n:
|
|
rdobuilder |
0a9e34 |
return
|
|
rdobuilder |
0a9e34 |
burn_io(0.3)
|
|
rdobuilder |
0a9e34 |
- yield from async_sleep(0.3)
|
|
rdobuilder |
0a9e34 |
- yield from recursive_a(n - 1)
|
|
rdobuilder |
0a9e34 |
+ await async_sleep(0.3)
|
|
rdobuilder |
0a9e34 |
+ await recursive_a(n - 1)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
tlocal = threading.local()
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
@@ -158,12 +151,10 @@ class MultiThreadTests(YappiUnitTestCase):
|
|
rdobuilder |
0a9e34 |
ts.append(t)
|
|
rdobuilder |
0a9e34 |
_ctag += 1
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def stop_loop():
|
|
rdobuilder |
0a9e34 |
+ async def stop_loop():
|
|
rdobuilder |
0a9e34 |
asyncio.get_event_loop().stop()
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- @asyncio.coroutine
|
|
rdobuilder |
0a9e34 |
- def driver():
|
|
rdobuilder |
0a9e34 |
+ async def driver():
|
|
rdobuilder |
0a9e34 |
futs = []
|
|
rdobuilder |
0a9e34 |
fut = asyncio.run_coroutine_threadsafe(a(), ts[0]._loop)
|
|
rdobuilder |
0a9e34 |
futs.append(fut)
|
|
rdobuilder |
0a9e34 |
diff --git a/yappi/_yappi.c b/yappi/_yappi.c
|
|
rdobuilder |
0a9e34 |
index fa3884e..0b10935 100644
|
|
rdobuilder |
0a9e34 |
--- a/yappi/_yappi.c
|
|
rdobuilder |
0a9e34 |
+++ b/yappi/_yappi.c
|
|
rdobuilder |
0a9e34 |
@@ -200,6 +200,15 @@ static int _pitenumdel(_hitem *item, void *arg);
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
// funcs
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
+static PyCodeObject *
|
|
rdobuilder |
0a9e34 |
+FRAME2CODE(PyFrameObject *frame) {
|
|
rdobuilder |
0a9e34 |
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 10
|
|
rdobuilder |
0a9e34 |
+ return PyFrame_GetCode(frame);
|
|
rdobuilder |
0a9e34 |
+#else
|
|
rdobuilder |
0a9e34 |
+ return frame->f_code;
|
|
rdobuilder |
0a9e34 |
+#endif
|
|
rdobuilder |
0a9e34 |
+}
|
|
rdobuilder |
0a9e34 |
+
|
|
rdobuilder |
0a9e34 |
static void _DebugPrintObjects(unsigned int arg_count, ...)
|
|
rdobuilder |
0a9e34 |
{
|
|
rdobuilder |
0a9e34 |
unsigned int i;
|
|
rdobuilder |
0a9e34 |
@@ -216,7 +225,9 @@ static void _DebugPrintObjects(unsigned int arg_count, ...)
|
|
rdobuilder |
0a9e34 |
int
|
|
rdobuilder |
0a9e34 |
IS_SUSPENDED(PyFrameObject *frame)
|
|
rdobuilder |
0a9e34 |
{
|
|
rdobuilder |
0a9e34 |
-#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 10
|
|
rdobuilder |
0a9e34 |
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 11
|
|
rdobuilder |
0a9e34 |
+ return 1;
|
|
rdobuilder |
0a9e34 |
+#elif PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION == 10
|
|
rdobuilder |
0a9e34 |
return (frame->f_state == FRAME_SUSPENDED);
|
|
rdobuilder |
0a9e34 |
#else
|
|
rdobuilder |
0a9e34 |
return (frame->f_stacktop != NULL);
|
|
rdobuilder |
0a9e34 |
@@ -229,11 +240,11 @@ int IS_ASYNC(PyFrameObject *frame)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
#if defined(IS_PY3K)
|
|
rdobuilder |
0a9e34 |
#if PY_MINOR_VERSION >= 4
|
|
rdobuilder |
0a9e34 |
- result = frame->f_code->co_flags & CO_COROUTINE ||
|
|
rdobuilder |
0a9e34 |
- frame->f_code->co_flags & CO_ITERABLE_COROUTINE;
|
|
rdobuilder |
0a9e34 |
+ result = FRAME2CODE(frame)->co_flags & CO_COROUTINE ||
|
|
rdobuilder |
0a9e34 |
+ FRAME2CODE(frame)->co_flags & CO_ITERABLE_COROUTINE;
|
|
rdobuilder |
0a9e34 |
#endif
|
|
rdobuilder |
0a9e34 |
#if PY_MINOR_VERSION >= 6
|
|
rdobuilder |
0a9e34 |
- result = result || frame->f_code->co_flags & CO_ASYNC_GENERATOR;
|
|
rdobuilder |
0a9e34 |
+ result = result || FRAME2CODE(frame)->co_flags & CO_ASYNC_GENERATOR;
|
|
rdobuilder |
0a9e34 |
#endif
|
|
rdobuilder |
0a9e34 |
#endif
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
@@ -650,7 +661,7 @@ _code2pit(PyFrameObject *fobj, uintptr_t current_tag)
|
|
rdobuilder |
0a9e34 |
return NULL;
|
|
rdobuilder |
0a9e34 |
}
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
- cobj = fobj->f_code;
|
|
rdobuilder |
0a9e34 |
+ cobj = FRAME2CODE(fobj);
|
|
rdobuilder |
0a9e34 |
it = hfind(pits, (uintptr_t)cobj);
|
|
rdobuilder |
0a9e34 |
if (it) {
|
|
rdobuilder |
0a9e34 |
return ((_pit *)it->val);
|
|
rdobuilder |
0a9e34 |
diff --git a/yappi/timing.c b/yappi/timing.c
|
|
rdobuilder |
0a9e34 |
index fa2ad24..b5bf083 100644
|
|
rdobuilder |
0a9e34 |
--- a/yappi/timing.c
|
|
rdobuilder |
0a9e34 |
+++ b/yappi/timing.c
|
|
rdobuilder |
0a9e34 |
@@ -81,13 +81,12 @@ tickcount(void)
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
rc = 0;
|
|
rdobuilder |
0a9e34 |
if (g_clock_type == CPU_CLOCK) {
|
|
rdobuilder |
0a9e34 |
- kern_return_t kr;
|
|
rdobuilder |
0a9e34 |
thread_basic_info_t tinfo_b;
|
|
rdobuilder |
0a9e34 |
thread_info_data_t tinfo_d;
|
|
rdobuilder |
0a9e34 |
mach_msg_type_number_t tinfo_cnt;
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
tinfo_cnt = THREAD_INFO_MAX;
|
|
rdobuilder |
0a9e34 |
- kr = thread_info(mach_thread_self(), THREAD_BASIC_INFO, (thread_info_t)tinfo_d, &tinfo_cnt);
|
|
rdobuilder |
0a9e34 |
+ thread_info(mach_thread_self(), THREAD_BASIC_INFO, (thread_info_t)tinfo_d, &tinfo_cnt);
|
|
rdobuilder |
0a9e34 |
tinfo_b = (thread_basic_info_t)tinfo_d;
|
|
rdobuilder |
0a9e34 |
|
|
rdobuilder |
0a9e34 |
if (!(tinfo_b->flags & TH_FLAGS_IDLE))
|
|
rdobuilder |
0a9e34 |
--
|
|
rdobuilder |
0a9e34 |
2.34.1
|
|
rdobuilder |
0a9e34 |
|