2011-01-20 4 views
6

Mam duże pliki do przeniesienia na wiele serwerów. Na razie używamy rsync, ale chciałbym eksperymentować z bittorentem.Czy znasz biblioteki Python do wysyłania/odbierania plików za pomocą Bittorent?

Studiuję kod Potopu, klienta Bittorent Python, ale używa on skręcony i jest całkowicie złożony. Czy wiesz coś na wysokim poziomie?

EDYCJA: Właśnie przeczytałem, że Facebook wykonuje wdrożenie kodu za pomocą Bittorent. Może opublikowali swoją bibliotekę, ale nie mogę jej znaleźć. Słyszałeś o tym?

+2

http://code.google.com/p/python-libtorrent/ może być pomocny. Jest to wrapper Pythona wokół biblioteki libtorrent C++. – user225312

+0

Został włączony do projektu potopu i jest teraz narysowany w 1000 linii kodu bez książki kucharskiej. –

Odpowiedz

5

Zdecydowanie polecam libtorrent-rasterbar. Jest to biblioteka C++ z powiązaniami w Pythonie. Ten sam, który zasila Potop, Transmisję, Miro i wielu innych klientów z bittorrent.

W przeciwieństwie do innego libtorrent (tego, który jest częścią projektu rTorrent), ten jest w fazie aktywnego rozwoju i obsługuje wszystkie nowoczesne rozszerzenia protokołów, takie jak DHT, transfer metadanych, a nawet niektóre autorskie rozszerzenia uTorrent, takie jak wymiana peerów (PEX)).

Interfejs API jest bardzo dobrze udokumentowany.

Jak widać z poniższego pełni funkcjonalny prosty przykład klienta, nie trzeba rozumieć każdy kawałek bazowego Protocol (oczywiście, to bardzo pomaga, gdy robisz):

#!/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 ma dedykowaną stronę dla swoich projektów open source pod numerem http://developers.facebook.com/opensource/. Nie ma wymienionej implementacji bittorrent.

+0

Bardzo przydatne. Dzięki Ci. –

2

Oryginalny klient BitTorrent jest napisany w języku Python. Sprawdziłeś to?

+1

To bardzo daleko od poziomu wysokości. Jeśli nie znasz protokołu, utkniesz. –