İstek/yanıt döngüsünün dışında işlenmesi gereken öğeleri sıraya almak için bir Tornado web sunucusu kullanıyorum.Tornado'da bir işlem kuyruğu oluşturma
Aşağıdaki basitleştirilmiş örneğimde, her istek geldiğinde, queued_items
adlı listeye yeni bir dize ekliyorum. Bu listeyi izleyecek ve öğeleri ortaya çıktıkça işleyecek bir şey oluşturmak istiyorum.
(Gerçek kodumda, öğeler web isteği geldiğinde bağlanabilen veya bağlanamayan bir TCP soketi üzerinden işlenir ve gönderilir. Web sunucusunun soket bağlantısından bağımsız olarak sıra beklemeye devam etmesini istiyorum)
Bu kodu basit tutmaya çalışıyorum ve Redis veya Beanstalk gibi harici kuyrukları/programları kullanmıyorum. Çok yüksek hacimli olmayacak.
Yeni öğeler için client.queued_items
listesini izlemek ve geldiklerinde işlemden geçirmek için Tornado deyimlerini kullanmanın iyi bir yolu nedir?
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()
Bu tam olarak ihtiyacım olan şey. Bana nasıl uygulanacağını gösterdiğiniz için teşekkürler. – Scott
Dano - Kuyruğu izlemeyi nasıl durdurabilirim? Bağlantım kötüleştiğinde, sıradaki öğeleri işlemeyi geçici olarak durdurmam gerekecek, ancak bunları kaybetmeyeceğim. – Scott
toro, kasırgaya birleştirildi ve şimdi kullanımdan kaldırıldı. Tornado> = 4.2 için 'tornado.queues.Queue' –