显示龙卷风请求的进度

时间:2015-11-06 09:23:09

标签: mysql ajax file-upload progress-bar tornado

我有一个龙卷风应用程序,上传大文本文件(约500,000行),然后对其进行一些处理,最后将数据插入MySQL表。

我这样做了,但我想展示过程的进展。换句话说,由于该过程需要很长时间,我想向用户显示处理了多少文件记录以及在表中插入了多少条记录。

我想也许有可能制作一个json文件并将进度写入,然后使用AJAX阅读内容并在页面中显示。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

最后,我得到了答案。

我使用WebSocket查看上传文件的进度。

也就是说,我首先使用处理程序上传文件,然后,当网页呈现给浏览器时,我打开套接字连接并用线程启动进程。

这样的事情:

class MyProcessWebSocket(WebSocketHandler):
    def __init__(self, application, request, **kwargs):
        super(ProcessBillWebSocket, self).__init__(application, request, **kwargs)
        self.fid = None

    def do_process(self, z, name):
        res = dict(percent=0)
        self.write_message(res)

        # do some process and self.write_message(res) in each loop.

        self.close()

    def open(self, *args, **kwargs):
        try:
            self.fid = args[0] if args[0] else None
        except:
            pass
        if not self.fid:
            self.close()
            return

        # Open file with self.fid that sent from rendered webpage.

        filename = os.path.join(sh.web['static_address'], 'tmp', '%s.txt' % self.fid)

        try:
            z = ProcessClass.read_file(filename)
            t = threading.Thread(target=self.do_process, args=(z, self.fid))
            t.start()
        finally:
            os.remove(filename)


    def on_message(self, message):
        # nothing to do
        pass

    def on_close(self):
        print("connection closed.")

我不知道这是好方法,但我的问题已经解决了。

还有其他想法???