Это называется "магнитные звенья" (не магнитные).
В новых версиях libtorrent способ добавления ссылки на магнит:
params = lt.parse_magnet_link(uri)
handle = ses.add_torrent(params)
Это также дает вам возможность настроить объект add_torrent_params
, например, для установки каталога сохранения.
Если вы добавляете много магнитных ссылок (или обычных торрент-файлов в этом отношении) и хотите сделать это быстро, используйте более быстрый способ:
ses.add_torrent_async(params)
Эта функция сразу же вернется, и объект torrent_handle
можно будет позднее найти в add_torrent_alert
.
Что касается параллельной загрузки нескольких магнитных ссылок, ваш псевдокод для их добавления является правильным. Вы просто хотите убедиться, что вы либо сохранили все torrent_handle
объекты, которые вы вернули, либо запросили все торрент-дескрипторы, как только вы закончите их добавлять (используя ses.get_torrents()
). В вашем псевдокоде вы, кажется, перезаписываете последний дескриптор торрента каждый раз, когда добавляете новый.
Условие, которое вы выражали для выхода, состояло в том, что все торренты были завершены. Самый простой способ сделать это - просто опросить их всех с помощью handle.status().is_seeding
. то есть переберите свой список торрент-дескрипторов и спросите об этом. Имейте в виду, что для вызова status()
требуется двусторонняя передача в сетевой поток libtorrent, которая не супер быстрая.
Более быстрый способ сделать это - отслеживать все торренты, которые еще не высеваются, и "вычеркивать их из списка", когда вы получаете torrent_finished_alert
с для торрентов. (вы получаете оповещения по телефону ses.pop_alerts()
).
Еще одно предложение, которое я хотел бы сделать, - настроить ваш settings_pack
объект сначала , а затем создать сеанс. Это более эффективно и немного чище. Особенно в отношении открытия сокетов прослушивания, а затем немедленного закрытия и повторного открытия их при изменении настроек.
* * +1032 т.е.
p = lt.settings_pack()
p['proxy_hostname'] = '...'
p['proxy_username'] = '...'
p['proxy_password'] = '...'
p['proxy_port'] = 1080
p['proxy_type'] = lt.proxy_type_t.socks5_pw
p['proxy_peer_connections'] = True
ses = lt.session(p)