kore

An easy to use, scalable and secure web application framework for writing web APIs in C.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

async_queue.py (1763B)



      1 #
      2 # Copyright (c) 2018 Joris Vink <joris@coders.se>
      3 #
      4 # Permission to use, copy, modify, and distribute this software for any
      5 # purpose with or without fee is hereby granted, provided that the above
      6 # copyright notice and this permission notice appear in all copies.
      7 #
      8 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     11 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     13 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     14 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15 #
     16 
     17 #
     18 # Asynchronous queue example.
     19 #
     20 
     21 import kore
     22 
     23 # The shared queue.
     24 tq = kore.queue()
     25 
     26 # Entry point for our independent coroutine that is created when kore starts.
     27 async def queue_helper():
     28     while True:
     29         # Wait for a dictionary to arrive.
     30         obj = await tq.pop()
     31         kore.log(kore.LOG_INFO, "coro(): received %s" % obj)
     32 
     33         # Create a message to send back.
     34         msg = "%d = %s" % (kore.time(), obj["msg"])
     35 
     36         # Send it on the received queue.
     37         obj["rq"].push(msg)
     38 
     39 @kore.route("/queue", methods=["get"])
     40 async def async_queue(req):
     41     # Create our own queue.
     42     rq = kore.queue()
     43 
     44     # The dictionary we are going to send.
     45     obj = {
     46         # Receive queue object.
     47         "rq": rq,
     48         "msg": "hello"
     49     }
     50 
     51     # Push it onto the tq queue now, which will wake up the other coroutine.
     52     tq.push(obj)
     53 
     54     # Wait for a response.
     55     response = await rq.pop()
     56 
     57     # Send the response to the client.
     58     req.response(200, response.encode())