Bite code
Bite code

Reputation: 597341

Do you know Python libs to send / receive files using Bittorent?

I have bigs files to move to a lot of servers. For now we use rsync, but I would like to experiment with bittorent.

I'm studing the code of Deluge, a Python bittorent client but it uses twisted and is utterly complex. Do you know anything hight level?

EDIT: I just read that Facebook does code deployment using Bittorent. Maybe they published their lib for that, but I can't find it. Ever hear of it?

Upvotes: 7

Views: 925

Answers (2)

Nikolai Gorchilov
Nikolai Gorchilov

Reputation: 927

I definitely recommend libtorrent-rasterbar. It's a C++ library with Python bindings. The same one that powers Deluge, Transmission, Miro and many other bittorrent clients.

In contrast to the other libtorrent (the one that is part of rTorrent project), this one is under active development and supports all modern protocol extensions, like DHT, metadata transfer and even some proprietary uTorrent extensions like peer exchange (PEX).

The API is very well documented.

As you can see from the following fully functional simple client example, you don't need to understand every bit of the underlying protocol (of course, it helps a lot when you do):

#!/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'

P.S. Facebook has a dedicated page for their opensource projects at http://developers.facebook.com/opensource/. There's no bittorrent implementation listed.

Upvotes: 5

mipadi
mipadi

Reputation: 411192

The original BitTorrent client is written in Python. Have you checked that out?

Upvotes: 2

Related Questions