2011-01-20 12 views
6

Ho grandi file da spostare su molti server. Per ora usiamo rsync, ma mi piacerebbe sperimentare con bittorent.Conoscete le librerie Python per inviare/ricevere file usando Bittorent?

Sto studiando il codice di Deluge, un client bittorente Python, ma utilizza un twisted ed è assolutamente complesso. Conosci qualcosa di alto livello?

EDIT: Ho appena letto che Facebook implementa il codice utilizzando Bittorent. Forse hanno pubblicato la loro lib per quello, ma non riesco a trovarlo. Ne hai mai sentito parlare?

+2

http://code.google.com/p/python-libtorrent/ potrebbe essere utile. È un wrapper Python attorno alla libreria libtorrent C++. – user225312

+0

È stato incluso nel progetto diluvio ed è ora disegnato in 1000 righe di codice senza ricettario. –

risposta

5

Raccomando decisamente libtorrent-rasterbar. È una libreria C++ con collegamenti Python. Lo stesso che alimenta Deluge, Transmission, Miro e molti altri client bittorrent.

In contrasto con l'altro libtorrent (quello che fa parte del progetto rTorrent), questo è in fase di sviluppo attivo e supporta tutte le estensioni di protocollo moderne, come DHT, trasferimento di metadati e anche alcune estensioni proprietarie di uTorrent come lo scambio peer (PEX).

L'API è molto ben documentata.

Come si può vedere dal seguente esempio client semplice completamente funzionale, non è necessario capire ogni bit del protocollo sottostante (ovviamente, aiuta molto quando si fa):

#!/bin/python 
# Copyright Arvid Norberg 2008. Use, modification and distribution is 
# subject to the Boost Software License, Version 1.0. (See accompanying 
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 


import libtorrent as lt 
import time 
import sys 

ses = lt.session() 
ses.listen_on(6881, 6891) 

info = lt.torrent_info(sys.argv[1]) 
h = ses.add_torrent({'ti': info, 'save_path': './'}) 
print 'starting', h.name() 

while (not h.is_seed()): 
    s = h.status() 

    state_str = ['queued', 'checking', 'downloading metadata', 'downloading', \ 
     'finished', 'seeding', 'allocating', 'checking fastresume'] 
    print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \ 
     (s.progress * 100, s.download_rate/1000, s.upload_rate/1000, \ 
     s.num_peers, state_str[s.state]), 
    sys.stdout.flush() 

    time.sleep(1) 

print h.name(), 'complete' 

PS Facebook ha una pagina dedicata per i loro progetti opensource allo http://developers.facebook.com/opensource/. Non è elencata alcuna implementazione bittorrent.

+0

Molto utile. Grazie. –

2

Il client BitTorrent originale è scritto in Python. L'hai controllato?

+1

È molto lontano dal livello di altezza. Se non conosci il protocollo, sei bloccato. –

Problemi correlati