我有一个龙卷风应用程序,上传大文本文件(约500,000行),然后对其进行一些处理,最后将数据插入MySQL表。
我这样做了,但我想展示过程的进展。换句话说,由于该过程需要很长时间,我想向用户显示处理了多少文件记录以及在表中插入了多少条记录。
我想也许有可能制作一个json文件并将进度写入,然后使用AJAX阅读内容并在页面中显示。
有更好的方法吗?
答案 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.")
我不知道这是好方法,但我的问题已经解决了。
还有其他想法???