diff --git a/asynq/contexts.py b/asynq/contexts.py index 62750a6..0998a79 100644 --- a/asynq/contexts.py +++ b/asynq/contexts.py @@ -92,7 +92,9 @@ def __enter__(self): return self def __exit__(self, ty, value, tb): - if not is_asyncio_mode(): + if is_asyncio_mode(): + self.pause() + else: leave_context(self, self._active_task) self.pause() del self._active_task diff --git a/asynq/tests/test_asynq_to_async.py b/asynq/tests/test_asynq_to_async.py index 78ad528..e472644 100644 --- a/asynq/tests/test_asynq_to_async.py +++ b/asynq/tests/test_asynq_to_async.py @@ -105,7 +105,7 @@ async def blocking_op(): await asyncio.sleep(0.1) @asynq.asynq() - def f1(): + def f1(): # 500ms with AsyncTimer() as timer: time.sleep(0.1) t1, t2 = yield f2.asynq() @@ -113,7 +113,7 @@ def f1(): return timer.total_time, t1, t2 @asynq.asynq() - def f2(): + def f2(): # 300ms with AsyncTimer() as timer: time.sleep(0.1) t = yield f3.asynq() @@ -121,7 +121,7 @@ def f2(): return timer.total_time, t @asynq.asynq() - def f3(): + def f3(): # 100ms with AsyncTimer() as timer: # since AsyncTimer is paused on blocking operations, # the time for TestBatch is not measured @@ -129,9 +129,9 @@ def f3(): return timer.total_time t1, t2, t3 = asyncio.run(f1.asyncio()) - assert_eq(400000, t1, tolerance=10000) # 400ms, 10us tolerance - assert_eq(200000, t2, tolerance=10000) # 200ms, 10us tolerance - assert_eq(000000, t3, tolerance=10000) # 0ms, 10us tolerance + assert_eq(500000, t1, tolerance=10000) # 400ms, 10us tolerance + assert_eq(300000, t2, tolerance=10000) # 200ms, 10us tolerance + assert_eq(100000, t3, tolerance=10000) # 0ms, 10us tolerance def test_method(): diff --git a/requirements.txt b/requirements.txt index 94791ef..9874d7f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ qcore pygments black==24.3.0 mypy==1.4.1 +typing_extensions==4.11.0 \ No newline at end of file