Utilizzo un server Web di Tornado per mettere in coda gli articoli che devono essere elaborati al di fuori del ciclo di richiesta/risposta.Creazione di una coda di elaborazione in Tornado
Nel mio esempio semplificato di seguito, ogni volta che arriva una richiesta, aggiungo una nuova stringa a un elenco chiamato queued_items
. Voglio creare qualcosa che guarderà quell'elenco ed elaborerà gli oggetti così come appaiono in esso.
(Nel mio codice reale, gli articoli vengono elaborati e inviati tramite un socket TCP che può essere connesso o meno quando arriva la richiesta Web. Desidero che il server Web continui ad accodare gli elementi indipendentemente dalla connessione socket)
Sto cercando di mantenere questo codice semplice e di non utilizzare code esterne/programmi come Redis o Beanstalk. Non avrà un volume molto alto.
Qual è un buon modo utilizzando gli idiomi di Tornado per guardare l'elenco client.queued_items
per i nuovi articoli ed elaborarli all'arrivo?
import time
import tornado.ioloop
import tornado.gen
import tornado.web
class Client():
def __init__(self):
self.queued_items = []
@tornado.gen.coroutine
def watch_queue(self):
# I have no idea what I'm doing
items = yield client.queued_items
# go_do_some_thing_with_items(items)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
client.queued_items.append("%f" % time.time())
self.write("Queued a new item")
if __name__ == "__main__":
client = Client()
# Watch the queue for when new items show up
client.watch_queue()
# Create the web server
application = tornado.web.Application([
(r'/', IndexHandler),
], debug=True)
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Questo è esattamente ciò di cui avevo bisogno. Grazie per avermi mostrato come implementarlo. – Scott
Dano - Come posso smettere di guardare la coda? Quando la mia connessione va male, dovrò interrompere temporaneamente l'elaborazione degli articoli in coda ma non perderli. – Scott
toro è stato fuso in tornado ed è ora deprecato. Per tornado> = 4.2 puoi usare 'tornado.queues.Queue' –