2017-08-14 3 views
1

マグネットURIからトレントをダウンロードするには、次のコードがあります。 2キロバイト、ファイル1 - - 300メガバイト、ファイル3〜2キロバイトそれが動作libtorrentのダウンロードでファイルをディスクに書き込むことを完全にスキップする方法は?

#python 
#lt.storage_mode_t(0) ## tried this, didnt work 
ses = lt.session() 
params = { 'save_path': "/save/here"} 

ses.listen_on(6881,6891) 
ses.add_dht_router("router.utorrent.com", 6881) 

#ses = lt.session() 
link = "magnet:?xt=urn:btih:395603fa..hash..." 
handle = lt.add_magnet_uri(ses, link, params) 
while (not handle.has_metadata()): 
    time.sleep(1) 
handle.pause() # got meta data paused, and set priority 
handle.file_priority(0, 1) 
handle.file_priority(1,0) 
handle.file_priority(2,0) 
print handle.file_priorities() 
#output is [1,0,0] 
#i checked no files written into disk yet. 
handle.resume() 
while (not handle.is_finished()): 
    time.sleep(1) #wait until download 

が、しかし、この特定の急流では、3つのファイル、ファイル0があります。

ファイルから見ることができるように、ファイル0は優先度1を持ち、残りは優先度0です(つまりダウンロードしません)。

問題は、0ファイルのダウンロードが完了したら、それを停止してもうダウンロードしないことです。 1つのファイル(部分的に、場合によっては100MB、または200MB、時にはカップルのkbと時にはファイル全体をダウンロードすることもあります)。

だから私の質問は:どのように私は0を提出してくださいすることができますがダウンロードされ、そしてない1と2

EDIT:私は、私は、メタデータを持っているかどうかチェックし、設定された優先度と、その後の再開を追加しましたしかし、これはまだ2番目のファイルを部分的にダウンロードします。

答えて

1

この理由は、ダウンロードを開始するtorrentを追加するときとファイルの優先順位を設定するときの競合が原因です。

p = parse_magnet_uri(link) 
p['file_priorities'] = [1, 0, 0] 
handle = ses.add_torrent(p) 

UPDATE:あなたは、このような何か急流を追加するとともに、ファイルの優先順位を設定することができ、これを回避するために

あなたはファイルの数を知っている必要はありませんが、 Torrentファイルで終わるよりも多くのファイルにファイルの優先順位を付けることはOKです。残りのものは無視されます。ただし、swarmからメタデータ/ .torrent以外のものをダウンロードしたくない場合、より良い方法はflag_upload_modeフラグを設定することです。 documentationを参照してください。

p = parse_magnet_uri(link) 
p['flags'] |= add_torrent_params_flags_t.flag_upload_mode 
handle = ses.add_torrent(p) 
+0

トレントのダウンロードを開始する前に、トレント、ファイル数+サイズ、ピア数に関するメタデータが必要なので、メタデータを取得してプライオリティを設定できますか?またはメタデータを取得する前に優先順位を設定する必要がありますか? – mur

+0

私はコードを更新しました。メタデータのダウンロード、トレントの一時停止、優先度の設定を待ってから再開し、handle.is_finishedがtrueになるまでループします。しかし、それはまだこのレースを作成します。つまり、2番目のファイルがダウンロードされます – mur

関連する問題