Comments (3)
I don't think this is the problem.
janus
doesn't switch the loop on await async_q.get()
if queue is not empty.
Your example fetches many items one by one in while
loop until gets queue-empty state and waits for new data.
Usually asyncio code does IO operations: performs HTTP requests, communicates with database etc.
Once IO is not ready (e.g. socket read buffer has no data to fetch, write buffer is overloaded etc. etc.) the task is suspended.
I expect you do have IO in your real while
loop, q.get()
is not the only possible yield point.
P.S.
await asyncio.sleep(0)
should be enough.
from janus.
You're perfectly right. Calling await asyncio.sleep(0)
fixes the issue. To be honest I expected any async
to always yield to the scheduler to give it time for other tasks, but it seems priorities get messed up. In fact I don't call any I/O there right now as I use it as a synchronization point between other tasks.
from janus.
In fact await
doesn't force context switch exactly for performance reason.
It is a possible switch point, not mandatory. await asyncio.sleep(0)
forces the switch.
Like old good file.read()
doesn't assume OS thread switching but time.sleep(0)
does.
from janus.
Related Issues (20)
- Could async_q.get() support a timeout? HOT 1
- Issue Passing Element Into Queue Right Before Co-Routine Completes HOT 2
- `RuntimeError: no running event loop` after upgrading to 0.5.0 HOT 6
- Inaccurate dependence python 3.5.3 - because of typing.Deque HOT 4
- formatting tests fail HOT 1
- One out of multiple thread consumers hogs queue if consumers count is > 10 HOT 1
- The 'timeout' arg should be typed as (optional) float instead of int HOT 1
- Dependabot couldn't authenticate with https://pypi.python.org/simple/
- join() calls should raise RuntimeError while the queue is closing or closed. HOT 3
- the perfomance is very bad HOT 2
- Exception Handling Question HOT 1
- Janus queues should be creatable in synchronous code as well as in asynchronous code HOT 2
- Error with Python 3.10: "ValueError: loop argument must agree with lock" HOT 11
- using deque HOT 2
- What is the correct way to type annotate a janus.Queue? HOT 3
- Performance benefits? HOT 4
- Double-ended Queue Support
- No running event loop HOT 6
- Use AnyIO (optionally) HOT 1
- Task was destroyed but it is pending HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from janus.