2011-07-02 20 views
14

tengo el siguiente código Python:Descarga de un Torrent con libtorrent-pitón

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) 

que parece funcionar bien, pero luego se ralentiza a menos de un byte/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 

Se se ralentiza y nunca termina. ¿Alguna idea de por qué sucede esto?

+0

¿Y su cliente de elección de torrents funciona bien con este torrente en particular? – Gleno

+0

Probé varios imanes URI, este es solo el que se encuentra en http://stackoverflow.com/questions/6051877/loading-magnet-link-using-rasterbar-libtorrent-in-python, todos los torrents que probé tienen compañeros más que suficientes y han descargado con más de 200 kb/s usando otro cliente. – cdecker

+0

¿me pueden ayudar? Estoy usando el mismo código que el de ustedes, pero en mi caso se quedó en el ciclo 'while (no h.has_metadata()):'. cualquiera sin embargo? – muaaz

Respuesta

13

El problema resultó ser trivial. El save_path no existía, por lo tanto, la biblioteca libtorrent se descargó siempre que no tuviera que vaciar el caché, pero una vez que intentó escribir el archivo, falló y no pudo continuar la descarga, por lo tanto, la ralentización y la interrupción final. Una vez que se agregó una ruta existente, funcionó bien.

3

La tasa de descarga que ve es más probable a partir de la descarga real de metadatos (es decir, el archivo .torrent descargado de sus pares). Una vez que el archivo .torrent se ha descargado, se inicia. En este caso.

Parece que ya tiene algunos de los archivos que pertenecen a este torrente, por lo que la descarga se detiene y se comprueban esos archivos. es decir, la pieza se lee, hash y se compara con los fragmentos hash de la pieza en el archivo .torrent.

La última columna muestra el número de megabytes encontrados en los archivos que coinciden con los valores hash, la última pero una columna muestra el estado del torrente, es decir, la comprobación.

Si espera hasta que finalice la comprobación, la descarga debería reanudarse.

Mejor aún, si guarda los datos del currículum al salir y lo vuelve a cargar en el inicio, no tiene que volver a verificarlo todo el tiempo.