5秒ごとにどのくらいのファイルが処理されるかを報告する方法はありますか?私はスレッドが必要だと思いますが、どのように制御されていますか?大きなファイルを処理中に進行状況を報告する方法はありますか?
#!/bin/env python
# -*- coding: utf8 -*-
import os
import sys
import logging
import hashlib
logger = logging.getLogger()
FORMAT = "%(asctime)s %(levelname)s: %(message)s"
logging.basicConfig(format=FORMAT, level=logging.DEBUG, datefmt="%H:%M:%S")
class fileScanner:
readBytes = 0
lastReadBytes = 0
fileSize = 0
reportSeconds = 5
def scanFile(self, filePath):
self.readBytes = 0
self.lastReadBytes = 0
logging.getLogger()
self.fileSize = os.path.getsize(filePath)
with open(filePath, 'rb') as f:
m = hashlib.sha512()
while True:
data = f.read(1024)
if not data:
break
self.readBytes += len(data)
m.update(data)
return m.hexdigest()
raise IOError("Couldn't process file '%s'" % filePath)
def reportProcess(self):
logging.getLogger()
percent = float((self.readBytes/self.fileSize) * 100)
secAvg = (self.readBytes - self.lastReadBytes)/self.reportSeconds
estimatedTime = (self.fileSize - self.readBytes)/secAvg
logging.info("%s%% (%s/%s bytes) read in average of %s MB/sec. Estimated time left: %s seconds." % (percent, self.readBytes, self.fileSize, secAvg, estimatedTime))
self.lastReadBytes = self.readBytes
if __name__ == "__main__":
fs = fileScanner()
hash = fs.scanfile('largefile.dat')
reportProcess()をどのように開始して終了しますか?
はい計算が間違っている可能性があります。
fs = fileScannerを実行すると、fileScannerのインスタンスは作成されません。あなたはクラスオブジェクトをfsに割り当てるだけです。 fs = fileScanner()にする必要があります。 –