我有以下代码从磁铁URI下载torrent。
#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
它的工作原理,但是在这个特定的torrent中,有3个文件,文件0 - 2 kb,文件1 - 300mb,文件3 - 2kb。
从代码中可以看出,文件0的优先级为1,而其余的优先级为0(即不要下载)。
问题是当0文件完成下载时,我希望它停止而不再下载。但它有时会下载1个文件 - 部分,有时是100mb,或200mb,有时是kb,有时是整个文件。
所以我的问题是:如何确保只下载文件0,而不是1和2.
编辑:我添加了检查是否有元数据,然后设置优先级然后恢复,但这仍然部分地下载了第二个文件。
答案 0 :(得分:1)
发生这种情况的原因是因为添加torrent(启动下载)和设置文件优先级之间的竞争。
为避免这种情况,您可以设置文件优先级以及添加torrent,如下所示:
p = parse_magnet_uri(link)
p['file_priorities'] = [1, 0, 0]
handle = ses.add_torrent(p)
<强>更新强>
您不需要知道文件的数量,可以为更多文件提供文件优先级,而不是最终存在于torrent文件中。其余的将被忽略。但是,如果您不想从群组中下载任何内容(元数据/ .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)