2011-07-02 14 views
14

I次のPythonコードを持っている:正常に動作するようですが、その後に減速しlibtorrent-のpythonでトレントをダウンロードする

import libtorrent as lt 
import time 

ses = lt.session() 
ses.listen_on(6881, 6891) 
params = { 
    'save_path': '/home/downloads/', 
    'storage_mode': lt.storage_mode_t(2), 
    'paused': False, 
    'auto_managed': True, 
    'duplicate_is_error': True} 
link = "magnet:?xt=urn:btih:4MR6HU7SIHXAXQQFXFJTNLTYSREDR5EI&tr=http://tracker.vodo.net:6970/announce" 
handle = lt.add_magnet_uri(ses, link, params) 
ses.start_dht() 

print 'downloading metadata...' 
while (not handle.has_metadata()): 
    time.sleep(1) 
print 'got metadata, starting torrent download...' 
while (handle.status().state != lt.torrent_status.seeding): 
    s = handle.status() 
    state_str = ['queued', 'checking', 'downloading metadata', \ 
       'downloading', 'finished', 'seeding', 'allocating'] 
    print '%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s %.3' % \ 
       (s.progress * 100, s.download_rate/1000, s.upload_rate/1000, \ 
       s.num_peers, state_str[s.state], s.total_download/1000000) 
    time.sleep(5) 

バイト/秒未満:

$ python test.py 
downloading metadata... 
got metadata, starting torrent download... 
0.00% complete (down: 195.0 kb/s up: 8.0 kB/s peers: 28) checking 3.069 
0.00% complete (down: 133.0 kb/s up: 5.0 kB/s peers: 28) checking 3.342 
0.00% complete (down: 29.0 kb/s up: 1.0 kB/s peers: 28) checking 3.359 
0.00% complete (down: 5.0 kb/s up: 0.0 kB/s peers: 28) checking 3.398 
0.00% complete (down: 4.0 kb/s up: 0.0 kB/s peers: 28) checking 3.401 
0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 28) checking 3.405 
0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 28) checking 3.408 
0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 28) checking 3.412 

それ遅くなり、決して完了しません。なぜこのようなことが起こるのか?

+0

あなたのトレントクライアントは、この特定のトレントでうまく機能しますか? – Gleno

+0

私はいくつかのmagnet-URIを試しました。これはhttp://stackoverflow.com/questions/6051877/loading-magnet-link-using-rasterbar-libtorrent-in-pythonにあるものです。私が試したすべてのトレントは他のクライアントを使用して200以上のkb/sでダウンロードしています。 – cdecker

+0

私を助けてもらえますか?私はあなたと同じコードを使用していますが、私の場合は 'while(h.has_metadata())ではありません:'のループに詰まっています。どんなに? – muaaz

答えて

13

問題は簡単ではないことが判明しました。 save_pathは存在しませんでした。したがって、libtorrentライブラリはキャッシュをフラッシュする必要がない限りダウンロードされましたが、ファイルを書き込もうとすると失敗してダウンロードを続行できませんでした。既存のパスが追加されると正常に動作しました。

3

表示されるダウンロード率は、実際のメタデータのダウンロード(つまり、ピアからダウンロードされた.torrentファイル)の可能性が高いです。 .torrentファイルがダウンロードされると、それが開始されます。この場合。

このトレントに属するファイルがすでにあるように見えるので、ダウンロードが停止され、それらのファイルがチェックされています。ピースは読み込まれ、ハッシュされ、.torrentファイルのピースハッシュと比較されます。

最後の列には、ハッシュと一致するファイルで検出されたメガバイト数が表示されます。最後の列には、トレントの状態、つまりチェックが表示されます。

チェックが完了するまで待つと、ダウンロードが再開されます。

終了時にレジュームデータを保存し、起動時に再度読み込むと、毎回再チェックする必要はありません。

関連する問題