亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? storage.py

?? 一個多點下載且源碼公開的P2P軟件
?? PY
?? 第 1 頁 / 共 2 頁
字號:
# Written by Bram Cohen# see LICENSE.txt for license informationfrom BitTornado.piecebuffer import BufferPoolfrom threading import Lockfrom time import time, strftime, localtimeimport osfrom os.path import exists, getsize, getmtime, basenamefrom traceback import print_exctry:    from os import fsyncexcept ImportError:    fsync = lambda x: Nonefrom bisect import bisect    try:    Trueexcept:    True = 1    False = 0DEBUG = FalseMAXREADSIZE = 32768MAXLOCKSIZE = 1000000000LMAXLOCKRANGE = 3999999999L   # only lock first 4 gig of file_pool = BufferPool()PieceBuffer = _pool.newdef dummy_status(fractionDone = None, activity = None):    passclass Storage:    def __init__(self, files, piece_length, doneflag, config,                 disabled_files = None):        # can raise IOError and ValueError        self.files = files        self.piece_length = piece_length        self.doneflag = doneflag        self.disabled = [False] * len(files)        self.file_ranges = []        self.disabled_ranges = []        self.working_ranges = []        numfiles = 0        total = 0l        so_far = 0l        self.handles = {}        self.whandles = {}        self.tops = {}        self.sizes = {}        self.mtimes = {}        if config.get('lock_files', True):            self.lock_file, self.unlock_file = self._lock_file, self._unlock_file        else:            self.lock_file, self.unlock_file = lambda x1,x2: None, lambda x1,x2: None        self.lock_while_reading = config.get('lock_while_reading', False)        self.lock = Lock()        if not disabled_files:            disabled_files = [False] * len(files)        for i in xrange(len(files)):            file, length = files[i]            if doneflag.isSet():    # bail out if doneflag is set                return            self.disabled_ranges.append(None)            if length == 0:                self.file_ranges.append(None)                self.working_ranges.append([])            else:                range = (total, total + length, 0, file)                self.file_ranges.append(range)                self.working_ranges.append([range])                numfiles += 1                total += length                if disabled_files[i]:                    l = 0                else:                    if exists(file):                        l = getsize(file)                        if l > length:                            h = open(file, 'rb+')                            h.truncate(length)                            h.flush()                            h.close()                            l = length                    else:                        l = 0                        h = open(file, 'wb+')                        h.flush()                        h.close()                    self.mtimes[file] = getmtime(file)                self.tops[file] = l                self.sizes[file] = length                so_far += l        self.total_length = total        self._reset_ranges()        self.max_files_open = config['max_files_open']        if self.max_files_open > 0 and numfiles > self.max_files_open:            self.handlebuffer = []        else:            self.handlebuffer = None    if os.name == 'nt':        def _lock_file(self, name, f):            import msvcrt            for p in range(0, min(self.sizes[name],MAXLOCKRANGE), MAXLOCKSIZE):                f.seek(p)                msvcrt.locking(f.fileno(), msvcrt.LK_LOCK,                               min(MAXLOCKSIZE,self.sizes[name]-p))        def _unlock_file(self, name, f):            import msvcrt            for p in range(0, min(self.sizes[name],MAXLOCKRANGE), MAXLOCKSIZE):                f.seek(p)                msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK,                               min(MAXLOCKSIZE,self.sizes[name]-p))    elif os.name == 'posix':        def _lock_file(self, name, f):            import fcntl            fcntl.flock(f.fileno(), fcntl.LOCK_EX)        def _unlock_file(self, name, f):            import fcntl            fcntl.flock(f.fileno(), fcntl.LOCK_UN)    else:        def _lock_file(self, name, f):            pass        def _unlock_file(self, name, f):            pass    def was_preallocated(self, pos, length):        for file, begin, end in self._intervals(pos, length):            if self.tops.get(file, 0) < end:                return False        return True    def _sync(self, file):        self._close(file)        if self.handlebuffer:            self.handlebuffer.remove(file)    def sync(self):        # may raise IOError or OSError        for file in self.whandles.keys():            self._sync(file)    def set_readonly(self, f=None):        if f is None:            self.sync()            return        file = self.files[f][0]        if self.whandles.has_key(file):            self._sync(file)                def get_total_length(self):        return self.total_length    def _open(self, file, mode):        if self.mtimes.has_key(file):            try:              if self.handlebuffer is not None:                assert getsize(file) == self.tops[file]                newmtime = getmtime(file)                oldmtime = self.mtimes[file]                assert newmtime <= oldmtime+1                assert newmtime >= oldmtime-1            except:                if DEBUG:                    print ( file+' modified: '                            +strftime('(%x %X)',localtime(self.mtimes[file]))                            +strftime(' != (%x %X) ?',localtime(getmtime(file))) )                raise IOError('modified during download')        try:            return open(file, mode)        except:            if DEBUG:                print_exc()            raise    def _close(self, file):        f = self.handles[file]        del self.handles[file]        if self.whandles.has_key(file):            del self.whandles[file]            f.flush()            self.unlock_file(file, f)            f.close()            self.tops[file] = getsize(file)            self.mtimes[file] = getmtime(file)        else:            if self.lock_while_reading:                self.unlock_file(file, f)            f.close()    def _close_file(self, file):        if not self.handles.has_key(file):            return        self._close(file)        if self.handlebuffer:            self.handlebuffer.remove(file)            def _get_file_handle(self, file, for_write):        if self.handles.has_key(file):            if for_write and not self.whandles.has_key(file):                self._close(file)                try:                    f = self._open(file, 'rb+')                    self.handles[file] = f                    self.whandles[file] = 1                    self.lock_file(file, f)                except (IOError, OSError), e:                    if DEBUG:                        print_exc()                    raise IOError('unable to reopen '+file+': '+str(e))            if self.handlebuffer:                if self.handlebuffer[-1] != file:                    self.handlebuffer.remove(file)                    self.handlebuffer.append(file)            elif self.handlebuffer is not None:                self.handlebuffer.append(file)        else:            try:                if for_write:                    f = self._open(file, 'rb+')                    self.handles[file] = f                    self.whandles[file] = 1                    self.lock_file(file, f)                else:                    f = self._open(file, 'rb')                    self.handles[file] = f                    if self.lock_while_reading:                        self.lock_file(file, f)            except (IOError, OSError), e:                if DEBUG:                    print_exc()                raise IOError('unable to open '+file+': '+str(e))                        if self.handlebuffer is not None:                self.handlebuffer.append(file)                if len(self.handlebuffer) > self.max_files_open:                    self._close(self.handlebuffer.pop(0))        return self.handles[file]    def _reset_ranges(self):        self.ranges = []        for l in self.working_ranges:            self.ranges.extend(l)            self.begins = [i[0] for i in self.ranges]    def _intervals(self, pos, amount):        r = []        stop = pos + amount        p = bisect(self.begins, pos) - 1        while p < len(self.ranges):            begin, end, offset, file = self.ranges[p]            if begin >= stop:                break            r.append(( file,                       offset + max(pos, begin) - begin,                       offset + min(end, stop) - begin   ))            p += 1        return r    def read(self, pos, amount, flush_first = False):        r = PieceBuffer()        for file, pos, end in self._intervals(pos, amount):            if DEBUG:                print 'reading '+file+' from '+str(pos)+' to '+str(end)            self.lock.acquire()            h = self._get_file_handle(file, False)            if flush_first and self.whandles.has_key(file):                h.flush()                fsync(h)            h.seek(pos)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人麻豆午夜电影| 韩国理伦片一区二区三区在线播放| 91久久人澡人人添人人爽欧美| 中文字幕中文在线不卡住| 99国产精品国产精品毛片| 亚洲人亚洲人成电影网站色| 色婷婷av一区二区三区gif| 亚洲国产日韩a在线播放| 欧美精品色一区二区三区| 日产欧产美韩系列久久99| 精品国产sm最大网站| 国产精品资源在线| 国产精品久线在线观看| 在线观看成人小视频| 奇米精品一区二区三区在线观看一| 日韩一卡二卡三卡| 国产ts人妖一区二区| 亚洲精选免费视频| 91精品国产91久久久久久一区二区 | 国产伦精品一区二区三区视频青涩| 国产日韩欧美高清在线| 在线精品视频一区二区三四 | 国产不卡视频一区二区三区| 自拍视频在线观看一区二区| 欧美日本一区二区在线观看| 国产一区二区三区四区五区入口 | 中文字幕va一区二区三区| 91九色02白丝porn| 精久久久久久久久久久| 国产精品久久久久久久久免费桃花| 欧美午夜电影网| 国产在线麻豆精品观看| 亚洲图片另类小说| 日韩欧美一区二区久久婷婷| 成人av一区二区三区| 丝袜亚洲另类丝袜在线| 日本一区二区三区电影| 欧美视频完全免费看| 国产九色sp调教91| 亚洲成人在线观看视频| 国产欧美一区二区三区鸳鸯浴| 在线观看国产一区二区| 国产成人综合视频| 午夜精品久久一牛影视| 欧美国产精品v| 91精品一区二区三区久久久久久| 国产成人免费视频精品含羞草妖精| 一区二区三区**美女毛片| 2021中文字幕一区亚洲| 91福利小视频| 国产成人福利片| 日产欧产美韩系列久久99| 亚洲免费观看在线观看| 久久综合久久综合久久综合| 在线免费精品视频| 国产 欧美在线| 蜜桃视频一区二区三区 | 久久国产精品免费| 亚洲激情自拍视频| 久久无码av三级| 欧美精品自拍偷拍动漫精品| av影院午夜一区| 国产一区二区三区不卡在线观看| 亚洲国产精品一区二区www| 中文字幕欧美日本乱码一线二线| 日韩一区二区在线观看视频| 在线观看三级视频欧美| 成人综合婷婷国产精品久久免费| 免费在线成人网| 亚洲自拍与偷拍| 亚洲欧洲日韩综合一区二区| ww久久中文字幕| 日韩欧美亚洲国产精品字幕久久久| 91国产免费看| 不卡在线观看av| 国产乱一区二区| 麻豆91免费观看| 午夜精品aaa| 亚洲激情第一区| 国产精品传媒入口麻豆| 国产欧美日韩中文久久| 精品国产亚洲一区二区三区在线观看| 欧美日韩国产不卡| 欧美性猛片aaaaaaa做受| 色综合久久88色综合天天6| 成人国产精品视频| 国产不卡在线视频| 国产福利一区二区三区视频| 精品制服美女丁香| 麻豆精品一二三| 三级亚洲高清视频| 午夜a成v人精品| 亚洲第一福利一区| 亚洲精品国产精华液| 国产精品久久久久一区二区三区共 | 亚洲欧美综合另类在线卡通| 国产欧美日韩在线| 国产精品亲子伦对白| 亚洲国产精品成人综合| 国产欧美一区二区在线| 中文字幕巨乱亚洲| 中文字幕av免费专区久久| 久久久久久久久久美女| 久久毛片高清国产| 国产亚洲制服色| 中文字幕第一页久久| 欧美国产1区2区| 国产精品毛片大码女人| 中文字幕一区二区三区精华液| 国产精品乱人伦一区二区| 国产精品丝袜91| 亚洲三级电影网站| 一区二区视频在线| 亚洲国产欧美在线人成| 日产国产欧美视频一区精品| 久久99精品国产.久久久久久| 久久国产综合精品| 国产一区二区在线免费观看| 国产精品一二三四| kk眼镜猥琐国模调教系列一区二区| 成人av电影在线| 色婷婷综合五月| 欧美综合天天夜夜久久| 欧美高清视频www夜色资源网| 91精品国产综合久久婷婷香蕉| 日韩一级二级三级| 久久午夜羞羞影院免费观看| 国产精品美女久久久久久久久久久| 亚洲欧洲成人自拍| 亚洲一区二区三区三| 日日夜夜免费精品视频| 九九精品一区二区| a亚洲天堂av| 欧美日韩一区在线| 欧美大胆一级视频| 中文字幕欧美国产| 亚洲人亚洲人成电影网站色| 午夜精品久久一牛影视| 韩国v欧美v日本v亚洲v| 成人97人人超碰人人99| 欧美在线综合视频| 日韩欧美久久久| 欧美国产激情二区三区| 亚洲国产日韩a在线播放| 精品在线一区二区| 99精品国产99久久久久久白柏| 欧美日韩一二三区| 26uuuu精品一区二区| 国产精品毛片久久久久久| 亚洲超碰97人人做人人爱| 韩国女主播一区| 色成人在线视频| 欧美不卡视频一区| **性色生活片久久毛片| 视频一区二区三区中文字幕| 高清在线成人网| 欧美色图激情小说| 久久久久国产免费免费| 一区二区欧美精品| 精品一区二区三区免费毛片爱| 不卡免费追剧大全电视剧网站| 欧美精品高清视频| 欧美激情一区在线观看| 午夜精品国产更新| 成人av一区二区三区| 欧美一区二区在线免费播放| 国产欧美综合在线观看第十页| 亚洲国产视频在线| 国产99久久久久| 欧美日韩精品系列| 国产精品午夜久久| 日本成人在线视频网站| a美女胸又www黄视频久久| 日韩欧美国产三级| 亚洲黄色小说网站| 国产中文一区二区三区| 欧美在线看片a免费观看| 久久久精品免费免费| 午夜视黄欧洲亚洲| 成人黄页在线观看| 日韩欧美久久久| 亚洲一区二区精品3399| 懂色av一区二区三区免费看| 欧美巨大另类极品videosbest| 中文字幕av一区二区三区免费看 | 欧美不卡一二三| 亚洲国产精品一区二区久久| 成人免费视频国产在线观看| 欧美一二区视频| 亚洲精品免费看| 国产成人精品免费一区二区| 欧美一区二区在线观看| 亚洲一区欧美一区| 成人av电影免费在线播放| 精品国产精品网麻豆系列| 午夜欧美电影在线观看| 色综合天天综合在线视频| 国产欧美一区二区在线| 激情综合网激情| 91精品国产色综合久久不卡蜜臀 |