2011-07-02 20 views
14

Mam następujący kod Pythona:Pobieranie Torrent z 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) 

co wydaje się działać prawidłowo, ale następnie zwalnia do mniej niż bajtów/s:

$ 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 

To zwalnia i nigdy się nie kończy. Masz pomysł, dlaczego tak się dzieje?

+0

A twój klient torrentowy z wyboru działa dobrze z tym konkretnym torrentem? – Gleno

+0

Próbowałem kilku magnetycznych identyfikatorów URI, to tylko ten znaleziony w http://stackoverflow.com/questions/6051877/loading-magnet-link-using-rasterbar-libtorrent-in-python, wszystkie torrenty, których próbowałem, więcej niż wystarczająca liczba rówieśników i pobrano z 200+ kb/s przy użyciu innego klienta. – cdecker

+0

czy możesz mi pomóc? Używam tego samego kodu, co twój, ale w moim przypadku utknął w pętli 'while (nie h.has_metadata()):'. Any Any? – muaaz

Odpowiedz

13

Problem okazał się banalny. Ścieżka save nie istniała, więc biblioteka pobranych bibliotek była pobierana tak długo, jak długo nie musiała opróżniać pamięci podręcznej, ale gdy próbowała zapisać plik, nie powiodła się i nie mogła kontynuować pobierania, zatem spowolnienie i ewentualne zatrzymanie. Po dodaniu istniejącej ścieżki działało dobrze.

3

Wyświetlana częstość pobierania jest najprawdopodobniej spowodowana pobieraniem metadanych (np. Plik .torrent pobrany od użytkowników równorzędnych). Po pobraniu pliku .torrent jest on uruchamiany. W tym przypadku.

Wygląda na to, że masz już niektóre pliki należące do tego torrenta, więc pobieranie zostało zatrzymane i te pliki są sprawdzane. tzn. element jest odczytywany, mieszany i porównywany z hasłami elementu w pliku .torrent.

Ostatnia kolumna pokazuje liczbę megabajtów znalezionych w plikach pasujących do wartości skrótów, ostatnia kolumna wskazuje stan torrenta, tj. Sprawdzanie.

Jeśli zaczekasz na zakończenie sprawdzania, pobieranie powinno zostać wznowione.

Co więcej, jeśli po wyjściu zapisujesz dane wznowienia i wczytujesz je ponownie przy starcie, nie musisz ponownie sprawdzać za każdym razem.