亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python實現的一個p2p文件傳輸實例

2020-02-23 05:25:05
字體:
來源:轉載
供稿:網友

考慮到我手上的服務器逐漸的增多,有時候需要大規模的部署同一個文件,例如因為方便使用systemtap這個工具定位問題,需要把手上幾百臺服務器同時安裝kernel-debuginfo這個包,原有的方式采用一個源服務器,采用rsync或者scp之類的文件傳輸方式只能做到一個點往下分發這個文件,這個時候下發的速度就會比較的慢,基于以上原因,我寫了一個基于bt協議傳輸文件的小工具,實際測試,傳輸到10個機房,70多臺機器傳輸一個240M的這個內核文件,到所有的機器,源采用限速2m/s的上傳速度,測試的結果大概只要140s,就可以全部傳輸完畢,這個效率是非常之高,如果不限速的情況下速度會更快,下面把這個程序開源出來。

#!/usr/bin/env python import libtorrent as ltimport sysimport osimport timefrom optparse import OptionParserimport socketimport structimport fcntl def get_interface_ip(ifname):  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s',              ifname[:15]))[20:24])def ip2long(ip):  return reduce(lambda a,b:(a<<8)+b,[int(i) for i in ip.split('.')])  def get_wan_ip_address():  interfaces = set(['eth0', 'eth1', 'eth2', 'eth3', 'em1', 'em2', 'em3', 'em4'])  ip = ''  for i in interfaces:    try:      ip = get_interface_ip(i)      if (ip2long(ip) < ip2long('10.0.0.0') or ip2long(ip) > ip2long('10.255.255.255')) /        and (ip2long(ip) < ip2long('172.16.0.0') or ip2long(ip) > ip2long('172.33.255.255')) /        and (ip2long(ip) < ip2long('192.168.0.0') or ip2long(ip) > ip2long('192.168.255.255')):        return ip    except:      pass   return ip def make_torrent(path, save):  fs = lt.file_storage()  lt.add_files(fs, path)  if fs.num_files() == 0:    print 'no files added'    sys.exit(1)   input = os.path.abspath(path)  basename = os.path.basename(path)  t = lt.create_torrent(fs, 0, 4 * 1024 * 1024)   t.add_tracker("http://10.0.1.5:8760/announce")  t.set_creator('libtorrent %s' % lt.version)   lt.set_piece_hashes(t, os.path.split(input)[0], lambda x: sys.stderr.write('.'))  sys.stderr.write('/n')   save = os.path.dirname(input)  save = "%s/%s.torrent" % (save, basename)  f=open(save, "wb")  f.write(lt.bencode(t.generate()))  f.close()  print "the bt torrent file is store at %s" % save  def dl_status(handle):  while not (handle.is_seed()):    s = handle.status()     state_str = ['queued', 'checking', 'downloading metadata', /        'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']    print '/ractive_time: %d, %.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d, seeds: %d) %s' % /        (s.active_time, s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, /        s.num_peers, s.num_seeds, state_str[s.state]),    sys.stdout.flush()     time.sleep(1)def seed_status(handle, seedtime=100):  seedtime = int(seedtime)  if seedtime < 100:    seedtime = 100  while seedtime > 0:    seedtime -= 1    s = handle.status()     state_str = ['queued', 'checking', 'downloading metadata', /        'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']    print '/rseed_time: %d, %.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d, seeds: %d) %s' % /        (s.active_time, s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, /        s.num_peers, s.num_seeds, state_str[s.state]),    sys.stdout.flush()     time.sleep(1) def remove_torrents(torrent, session):  session.remove_torrent(torrent) def read_alerts(session):  alert = session.pop_alert()  while alert:    #print alert, alert.message()    alert = session.pop_alert() def download(torrent, path, upload_rate_limit=0, seedtime=100):  try:    session = lt.session()    session.set_alert_queue_size_limit(1024 * 1024)     sts = lt.session_settings()    sts.ssl_listen = False    sts.user_agent = "Thunder deploy system"    sts.tracker_completion_timeout = 5    sts.tracker_receive_timeout = 5    sts.stop_tracker_timeout = 5    sts.active_downloads = -1    sts.active_seeds = -1    sts.active_limit = -1    sts.auto_scrape_min_interval = 5    sts.udp_tracker_token_expiry = 120    sts.min_announce_interval = 1    sts.inactivity_timeout = 60    sts.connection_speed = 10    sts.allow_multiple_connections_per_ip = True    sts.max_out_request_queue = 128    sts.request_queue_size = 3     sts.use_read_cache = False    session.set_settings(sts)     session.set_alert_mask(lt.alert.category_t.tracker_notification | lt.alert.category_t.status_notification)    session.set_alert_mask(lt.alert.category_t.status_notification)     ipaddr = get_wan_ip_address()    #print ipaddr    if ipaddr == "":      session.listen_on(6881, 6881)    else:      session.listen_on(6881, 6881, ipaddr)     limit = int(upload_rate_limit)    if limit>=100:      session.set_upload_rate_limit(limit*1024)      session.set_local_upload_rate_limit(limit*1024)    print session.upload_rate_limit()    torrent_info = lt.torrent_info(torrent)    add_params = {      'save_path': path,      'storage_mode': lt.storage_mode_t.storage_mode_sparse,      'paused': False,      'auto_managed': True,      'ti': torrent_info,    }     handle = session.add_torrent(add_params)     read_alerts(session)    st = time.time()    dl_status(handle)    et = time.time() - st    print '/nall file download in %.2f/nstart to seeding/n' % et    sys.stdout.write('/n')    handle.super_seeding()    seed_status(handle, seedtime)     remove_torrents(handle, session)    assert len(session.get_torrents()) == 0   finally:    print 'download finished' if __name__ == '__main__':  usage = "usage: %prog [options] /n /   %prog -d -f <torrent file=""> -s <file save="" path="">/n /   or /n /   %prog -m -p <file or="" dir=""> -s <torrent save="" path="">/n"   parser = OptionParser(usage=usage)  parser.add_option("-d", "--download", dest="download",      help="start to download file", action="store_false", default=True)  parser.add_option("-f", "--file", dest="file",      help="torrent file")  parser.add_option("-u", "--upload", dest="upload",      help="set upload rate limit, default is not limit", default=0)  parser.add_option("-t", "--time", dest="time",      help="set seed time, default is 100s", default=100)  parser.add_option("-p", "--path", dest="path",      help="to make torrent with this path")  parser.add_option("-m", "--make", dest="make",      help="make torrent", action="store_false", default=True)  parser.add_option("-s", "--save", dest="save",      help="file save path, default is store to ./", default="./")  (options, args) = parser.parse_args()  #download(sys.argv[1])  if len(sys.argv) != 6 and len(sys.argv) != 4 and len(sys.argv) != 8 and len(sys.argv) != 10:    parser.print_help()    sys.exit()  if options.download == False and options.file !="":    download(options.file, options.save, options.upload, options.time)  elif options.make == False and options.path != "":    make_torrent(options.path, options.save)</torrent></file></file></torrent>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩中文字幕在线| 国产精品自产拍在线观看中文| 国产婷婷色综合av蜜臀av| 亚洲成色777777在线观看影院| 亚洲a级在线播放观看| 国自产精品手机在线观看视频| 日韩精品免费观看| 亚洲区免费影片| 国产精品激情av在线播放| 亚洲精品91美女久久久久久久| 久操成人在线视频| 成人网在线免费观看| 亚洲精品国产免费| 国产69久久精品成人| 亚洲精品720p| 欧美性猛交xxxxx免费看| 在线视频免费一区二区| 九九久久国产精品| 精品久久中文字幕久久av| 91美女片黄在线观| 国产精品久久激情| 国产精品一区二区3区| 久久久精品免费| 成人在线小视频| 91免费版网站入口| 欧美激情一区二区三区高清视频| 日韩成人久久久| 69国产精品成人在线播放| 日韩在线高清视频| 日韩经典一区二区三区| 成人444kkkk在线观看| 中文字幕在线观看亚洲| 91最新在线免费观看| 日韩精品视频在线观看免费| 一区二区三区视频免费| 在线精品国产成人综合| 亚洲一区国产精品| 日韩中文字幕视频在线观看| 亚洲人成电影在线观看天堂色| 国产精品久久久久77777| 欧美日韩免费网站| 亚洲第一免费播放区| 成人精品福利视频| 狠狠综合久久av一区二区小说| 国产日韩精品在线观看| 久久九九免费视频| 综合网中文字幕| 国产福利视频一区二区| 国产精品最新在线观看| 国产在线观看一区二区三区| 欧美成人中文字幕| 亚洲mm色国产网站| 精品国产欧美一区二区三区成人| 精品国产91乱高清在线观看| 亚洲成人中文字幕| 亚洲日本中文字幕免费在线不卡| 亚洲欧美999| 福利视频一区二区| 欧美激情第一页xxx| 国产成人av网址| 欧美日韩成人在线观看| 影音先锋日韩有码| 国产日产久久高清欧美一区| 欧洲一区二区视频| 国产精品久久久久不卡| 国产精品日韩欧美综合| 国产v综合ⅴ日韩v欧美大片| 国产亚洲欧美日韩美女| 一本色道久久综合狠狠躁篇的优点| 精品久久久av| 精品福利一区二区| 国产日韩在线免费| 国产精品久久久久久久9999| 国产精品视频成人| 国产成人高清激情视频在线观看| 国产精品情侣自拍| 欧美日韩成人在线观看| 精品久久久国产精品999| 国产精自产拍久久久久久蜜| 精品亚洲va在线va天堂资源站| 欧美色道久久88综合亚洲精品| 欧美激情久久久| 欧美激情中文字幕乱码免费| 国产主播精品在线| 黑人巨大精品欧美一区二区一视频| 91久热免费在线视频| 国产精品欧美激情在线播放| 欧美电影免费观看| 欧美激情免费看| 精品久久久久久中文字幕一区奶水| 91系列在线播放| 欧美怡春院一区二区三区| 日韩在线观看网址| 2021国产精品视频| 一区二区三区日韩在线| 国产精品一区二区久久久久| 中文字幕在线精品| 欧美亚洲在线播放| 免费91在线视频| 午夜精品久久久久久久男人的天堂| 亚洲美女精品成人在线视频| 成人在线免费观看视视频| 26uuu国产精品视频| 欧美日韩免费网站| 色综合老司机第九色激情| 国产精品视频公开费视频| 久久精品国产69国产精品亚洲| 欧美精品一区二区三区国产精品| 欧美日韩性视频在线| 亚洲人成网站色ww在线| 久久国产天堂福利天堂| 色偷偷88888欧美精品久久久| 911国产网站尤物在线观看| 69视频在线免费观看| 精品中文字幕视频| 亚洲少妇激情视频| 色综合久久88色综合天天看泰| 国语自产精品视频在线看一大j8| 91亚洲一区精品| 亚洲国产中文字幕在线观看| 538国产精品一区二区在线| 中文字幕欧美在线| 91精品国产色综合| 日本高清视频一区| 91日本在线观看| 欧美孕妇孕交黑巨大网站| 久久久精品久久久久| 日韩亚洲精品电影| 91爱爱小视频k| 精品福利樱桃av导航| 欧美一级大片视频| 国产欧美最新羞羞视频在线观看| 国产亚洲人成网站在线观看| 亚洲第一天堂无码专区| 欧美激情三级免费| 成人欧美一区二区三区黑人孕妇| 亚洲精品一区二区网址| 97视频网站入口| 亚洲欧洲偷拍精品| 中文字幕自拍vr一区二区三区| 久久亚洲私人国产精品va| 欧美亚洲成人xxx| 91产国在线观看动作片喷水| 2019中文字幕全在线观看| 91精品视频专区| 青青草99啪国产免费| 亚洲最大在线视频| 亚洲国产成人精品久久| 97香蕉久久超级碰碰高清版| 亚洲人成在线免费观看| 伊人久久男人天堂| 韩国三级电影久久久久久| 97在线视频免费| 国产精品91视频| 欧美日韩视频在线| 国产综合色香蕉精品| 亚洲裸体xxxx| 亚洲一区制服诱惑| 久久人人爽人人爽人人片av高请| 韩国欧美亚洲国产| 日本午夜人人精品| 黑人巨大精品欧美一区二区免费| 国产精品午夜一区二区欲梦| 欧美成人黄色小视频|