2015-11-06 121 views
0

我有一个龙卷风应用程序,它可以上传大型文本文件(大约500,000行),然后对其进行一些处理,最后将数据插入到MySQL表中。显示龙卷风请求的进度

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

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

有没有更好的方法?

回答

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.") 

我不知道这是很好的方式或没有,但我的问题已经解决了。

Is Any other idea ???