cari

Rumah  >  Soal Jawab  >  teks badan

python - tornado异步中设置cookie的问题

想通过异步的方式实现一个耗时的任务,但是又想在执行的过程中了解到进度,并且不借助于数据库,目前只能想到用cookie的来确定,但是使用异步的方式,cookie设置总是会出现问题,注意看下面的注释

import tornado.ioloop
import tornado.web
import time
from tornado import gen
from concurrent.futures import ThreadPoolExecutor
import tornado.httpclient
import datetime
import functools

class Executor(ThreadPoolExecutor):
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not getattr(cls, '_instance', None):
            cls._instance = ThreadPoolExecutor(max_workers=10)
        return cls._instance


class MainHandler(tornado.web.RequestHandler):
    executor = ThreadPoolExecutor(10)

    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def get(self):
        future = Executor().submit(self.sleep)
        response = yield tornado.gen.with_timeout(datetime.timedelta(10), future, quiet_exceptions = tornado.gen.TimeoutError
        )
        
        self.finish('OK啦')

    @tornado.concurrent.run_on_executor
    def sleep(self):
        self.set_cookie('step1', 'value')   # 这个cookie能设置
        time.sleep(10)
        self.set_cookie('step1', 'value')   # 这个cookie无法设置
        if not self.get_cookie('mycookie'):
            self.set_cookie('mycookie', 'myvalue')
        print('cookie设置完毕')
        return 'OK啦'

class TestHandler(tornado.web.RequestHandler):
    def get(self):
        if not self.get_cookie('mycookie'):
            self.write('没有')
        else:
            self.write('有')

application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/test", TestHandler),
], debug=True)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
阿神阿神2889 hari yang lalu449

membalas semua(2)saya akan balas

  • ringa_lee

    ringa_lee2017-04-17 17:34:09

    Tetapkan atribut untuk aplikasi Nilai ialah kamus atau sesuatu seperti itu. Antara muka ujian membaca secara langsung status dalam kamus ini. Status dalam kamus boleh dikemas kini dalam tugas tak segerak.

    Jika penyemak imbas yang berbeza memerlukan keadaan yang berbeza, maka gunakan perkara seperti kuki dan uid untuk membuat cincang.

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:34:09

    Hanya dedahkan antara muka untuk menunjukkan kemajuan, jika tidak kuki akan dimusnahkan oleh anda.

    balas
    0
  • Batalbalas