Giter Club home page Giter Club logo

Comments (3)

asvetlov avatar asvetlov commented on August 27, 2024 1

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.

hanikesn avatar hanikesn commented on August 27, 2024

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.

asvetlov avatar asvetlov commented on August 27, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.