私はマルチプロセッシングダウンローダを実装しました。 ターミナルの別の部分に自動的に更新できるステータスバー(完全な速度、ダウンロード速度)を印刷するにはどうすればいいですか? このようPythonでのマルチプロセッシングまたはマルチスレッドのダイナミックリフレッシュ印刷
:
499712 [6.79%] 68k/s // keep refreshing
122712 [16.79%] 42k/s // different process/thread
99712 [56.32%] 10k/s
コード:
download(...)
...
f = open(tmp_file_path, 'wb')
print "Downloading: %s Bytes: %s" % (self.file_name, self.file_size)
file_size_dl = 0
block_sz = 8192
start_time = time.time()
while True:
buffer = self.opening.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
end_time = time.time()
cost_time = end_time - start_time
if cost_time == 0:
cost_time = 1
status = "\r%10d [%3.2f%%] %3dk/s" % (file_size_dl,
file_size_dl * 100./self.file_size,
file_size_dl * 100./1024/1024/cost_time)
print status,
sys.stdout.flush()
f.close()
DownloadProcessプロセスのクラスを継承し、ダウンロード方法をトリガします。
私は、URLを格納するためにキューを使用します。ここに始まるプロセス
...
for i in range(3):
t = DownloadProcess(queue)
t.start()
for url in urls:
queue.put(url)
queue.join()
はあなたにも私たちが改善するためのコードを来る提供してもらえますか? –
http://excess.org/urwid/が役に立つかもしれませんが、タスクのための優れたウィジェットを提供する点でのみ役に立ちます。マスタープロセスで表示されているすべてのリストを管理する「頭」が必要です。ウェブページを行うほうが簡単でしょう。 – synthesizerpatel
@MarkGarcia更新された –