📄 scheduler.py
字号:
self.proctab[i][self.DEST] = path.join(self.abcparams['defaultfolder'], info['name'])
self.proctab[i][self.STATUS] = "queue"
self.proctab[i][self.PRIO] = 2 # Priority "Normal"
self.proctab[i][self.DONEFLAG] = None # Done flag
self.proctab[i][self.FILENAME] = info['name']
self.proctab[i][self.MAXUPLOAD] = self.abcparams['maxupload']
self.proctab[i][self.MAXUPLOADRATE] = self.abcparams['maxuploadrate']
self.proctab[i][self.UPLOADOPT] = self.abcparams['uploadoption']
self.proctab[i][self.UPLOADTIMEH] = self.abcparams['uploadtimeh']
self.proctab[i][self.UPLOADTIMEM] = self.abcparams['uploadtimem']
self.proctab[i][self.UPLOADRATIO] = self.abcparams['uploadratio']
self.proctab[i][self.DETAIL_ADR] = None
self.proctab[i][self.DOWNSIZE] = 0.0
self.proctab[i][self.UPSIZE] = 0.0
getslot = 1
numslot = i
break
if getslot == 0:
return
self.parent.list.InsertStringItem(numslot, "")
#Add Status info in List
for rank in range(0, self.guiman.getNumCol()):
colid = self.guiman.getIDfromRank(rank)
if colid == 4:
self.parent.list.SetStringItem(numslot, rank, self.proctab[numslot][self.FILENAME])
elif colid == 6:
self.parent.list.SetStringItem(numslot, rank, "queue")
elif colid == 7:
self.parent.list.SetStringItem(numslot, rank, self.priotext[self.proctab[numslot][self.PRIO]])
else:
self.parent.list.SetStringItem(numslot, rank, "")
self.updateTorrentList()
self.Scheduler()
def addOldProc(self, oldproc_array):
numproc = len(oldproc_array)
for i in range(0, numproc):
#if self.proctab[i][self.LISTINDEX] == -1:
self.proctab[i][self.LISTINDEX] = -2
self.proctab[i][self.ABCENGINE_ADR] = None
self.proctab[i][self.SRC] = oldproc_array[i][1]
self.proctab[i][self.DEST] = oldproc_array[i][2]
self.proctab[i][self.STATUS] = oldproc_array[i][3]
self.proctab[i][self.PRIO] = int(oldproc_array[i][4])
self.proctab[i][self.DONEFLAG] = None
self.proctab[i][self.FILENAME] = oldproc_array[i][0]
self.proctab[i][self.MAXUPLOAD] = self.abcparams['maxupload']
self.proctab[i][self.MAXUPLOADRATE] = self.abcparams['maxuploadrate']
self.proctab[i][self.UPLOADOPT] = self.abcparams['uploadoption']
self.proctab[i][self.UPLOADTIMEH] = self.abcparams['uploadtimeh']
self.proctab[i][self.UPLOADTIMEM] = self.abcparams['uploadtimem']
self.proctab[i][self.UPLOADRATIO] = self.abcparams['uploadratio']
self.proctab[i][self.DETAIL_ADR] = None
self.proctab[i][self.DOWNSIZE] = float(oldproc_array[i][5])
self.proctab[i][self.UPSIZE] = float(oldproc_array[i][6])
self.parent.list.InsertStringItem(i, "")
for rank in range(0, self.guiman.getNumCol()):
colid = self.guiman.getIDfromRank(rank)
if colid == 4: # Title column
self.list.SetStringItem(i, rank, self.proctab[i][self.FILENAME])
elif colid == 6: # BT status column
self.list.SetStringItem(i, rank, self.proctab[i][self.STATUS])
elif colid == 7:
self.list.SetStringItem(i, rank, self.priotext[self.proctab[i][self.PRIO]])
elif colid == 12:
if int(self.proctab[i][self.DOWNSIZE]) == 0 :
self.list.SetStringItem(i, rank, 'oo %')
else:
self.list.SetStringItem(i, rank, '%.1f'%((self.proctab[i][self.UPSIZE]/self.proctab[i][self.DOWNSIZE])*100) + "%")
elif colid == 18:
self.list.SetStringItem(i, rank, ('%.2f MB' % (self.proctab[i][self.DOWNSIZE] / (1 << 20))))
elif colid == 19:
self.list.SetStringItem(i, rank, ('%.2f MB' % (self.proctab[i][self.UPSIZE] / (1 << 20))))
else:
self.list.SetStringItem(i, rank, "")
#self.list.SetStringItem(i, 0, self.proctab[i][self.FILENAME])
#self.list.SetStringItem(i, 1, "")
#self.list.SetStringItem(i, 2, self.proctab[i][self.STATUS])
#self.list.SetStringItem(i, 3, self.priotext[self.proctab[i][self.PRIO]])
#self.list.SetStringItem(i, 4, "")
#self.list.SetStringItem(i, 5, "")
#self.list.SetStringItem(i, 6, "")
#self.list.SetStringItem(i, 7, "")
#self.list.SetStringItem(i, 8, "")
self.invokeLater(self.Scheduler)
def runProc(self, index, firsttime_flag):
self.proctab[index][self.DONEFLAG] = Event()
self.proctab[index][self.LISTINDEX] = index
self.proctab[index][self.STATUS] = "working"
self.proctab[index][self.ABCENGINE_ADR] = ABCEngine(self, index, firsttime_flag,
self.proctab[index][self.DONEFLAG],
self.proctab[index][self.PRIO],
self.guiman,
self.proctab[index][self.DOWNSIZE],
self.proctab[index][self.UPSIZE]
)
# Construct BT params
###########################
btparams = []
btparams.append("--responsefile")
btparams.append(self.proctab[index][self.SRC])
btparams.append("--minport")
btparams.append(self.abcparams['minport'])
btparams.append("--maxport")
btparams.append(self.abcparams['maxport'])
btparams.append("--max_uploads")
btparams.append(self.proctab[index][self.MAXUPLOAD])
btparams.append("--min_uploads")
btparams.append(self.proctab[index][self.MAXUPLOAD])
if self.abcparams['ip'] != '':
btparams.append("--ip")
btparams.append(self.abcparams['ip'])
if self.abcparams['bind'] != '':
btparams.append("--bind")
btparams.append(self.abcparams['bind'])
btparams.append("--min_peers")
btparams.append(self.abcparams['min_peers'])
btparams.append("--alloc_type")
btparams.append(self.abcparams['alloc_type'])
btparams.append("--alloc_rate")
btparams.append(self.abcparams['alloc_rate'])
btparams.append("--max_files_open")
btparams.append(self.abcparams['max_files_open'])
btparams.append("--max_connections")
btparams.append(self.abcparams['max_connections'])
btparams.append("--max_upload_rate")
max_upload_rate = int(self.proctab[index][self.MAXUPLOADRATE])
# if someone cheat by edit abc.conf to less than 3 kb/s
# make it to unlimited !!! *devil* :D
if max_upload_rate != 0 and max_upload_rate < 3:
btparams.append(str("0"))
else:
btparams.append(self.proctab[index][self.MAXUPLOADRATE])
btparams.append("--max_initiate")
nummaxupload = int(self.proctab[index][self.MAXUPLOAD])
if nummaxupload < 4 :
btparams.append(str(min(12, int(self.abcparams['max_initiate']))))
elif nummaxupload < 30:
btparams.append(str(min(40, int(self.abcparams['max_initiate']))))
else:
btparams.append(str(min(nummaxupload+10, int(self.abcparams['max_initiate']))))
if self.proctab[index][3] != "":
btparams.append("--saveas")
btparams.append(self.proctab[index][self.DEST])
for rank in range(0, self.parent.guiman.getNumCol()):
ID = self.parent.guiman.getIDfromRank(rank)
if ID == 6:
self.list.SetStringItem(index, rank, "Waiting..")
thread = Thread(target = runBT, args = [btparams, self.proctab[index][self.ABCENGINE_ADR],
self.proctab[index][self.DONEFLAG]])
thread.setDaemon(false)
thread.start()
def changeDEST(self, index, dest):
self.proctab[index][self.DEST] = dest
def changePriority(self, index, prio):
self.proctab[index][self.PRIO] = prio
if self.proctab[index][self.LISTINDEX] != -2:
self.proctab[index][self.ABCENGINE_ADR].changePrio(prio)
def getPriority(self, index):
return self.proctab[index][self.PRIO]
def changeSTATUS(self, index, status):
self.proctab[index][self.STATUS] = status
def changeFILENAME(self, index, filename):
self.proctab[index][self.FILENAME] = filename
def updateTorrentList(self):
torrentlist = TorrentListFileManager()
torrentlist.open(path.join(self.parent.abcpath, "torrent.lst"), "w")
for i in range(0, self.maxtorrent):
if self.proctab[i][self.LISTINDEX] == -1:
break
if self.proctab[i][self.FILENAME] == "":
continue
status = self.proctab[i][self.STATUS]
if status == "working":
status = "queue"
torrentlist.appendList(self.proctab[i][self.FILENAME],
self.proctab[i][self.SRC],
self.proctab[i][self.DEST],
status,
self.proctab[i][self.PRIO],
self.proctab[i][self.DOWNSIZE],
self.proctab[i][self.UPSIZE])
torrentlist.close()
def Scheduler(self):
if self.currentproc >= int(self.maxnumsim):
return
# Choose job by highest priority
#################################
for priority in range(0, 5):
done = 0
for i in range(0, self.maxtorrent):
if self.proctab[i][self.LISTINDEX] == -1:
break
if self.proctab[i][self.PRIO] != priority:
continue
if self.proctab[i][self.STATUS] == "queue" and self.currentproc < int(self.maxnumsim):
self.runProc(i, 0) #it will run before close :-\
self.currentproc += 1
if self.currentproc >= int(self.maxnumsim):
done = 1
break
if (done):
break
def getLocalInfo(self, index):
return ([self.proctab[index][self.MAXUPLOAD], self.proctab[index][self.MAXUPLOADRATE],
self.proctab[index][self.UPLOADOPT], self.proctab[index][self.UPLOADTIMEH],
self.proctab[index][self.UPLOADTIMEM], self.proctab[index][self.UPLOADRATIO]])
def changeLocalInfo(self, index, info):
if self.proctab[index][self.LISTINDEX] == -1:
return
self.proctab[index][self.MAXUPLOAD] = info[0]
self.proctab[index][self.MAXUPLOADRATE] = info[1]
if self.proctab[index][self.LISTINDEX] == -2 or self.proctab[index][self.STATUS] != "completed" :
self.proctab[index][self.UPLOADOPT] = info[2]
self.proctab[index][self.UPLOADTIMEH] = info[3]
self.proctab[index][self.UPLOADTIMEM] = info[4]
self.proctab[index][self.UPLOADRATIO] = info[5]
if self.proctab[index][self.LISTINDEX] != -2: #active process
if self.proctab[index][self.ABCENGINE_ADR].config is None:
self.proctab[index][self.ABCENGINE_ADR].config = self.proctab[index][self.ABCENGINE_ADR].dow.getConfig()
self.proctab[index][self.ABCENGINE_ADR].config['max_upload_rate'] = int(info[1]) * 1000
nummaxupload = int(info[0])
self.proctab[index][self.ABCENGINE_ADR].config['max_uploads'] = nummaxupload
self.proctab[index][self.ABCENGINE_ADR].config['min_uploads'] = nummaxupload
self.proctab[index][self.ABCENGINE_ADR].dow.setUploadRate()
if nummaxupload < 4:
self.proctab[index][self.ABCENGINE_ADR].config['max_initiate'] = 12
elif nummaxupload < 30:
self.proctab[index][self.ABCENGINE_ADR].config['max_initiate'] = 40
else:
self.proctab[index][self.ABCENGINE_ADR].config['max_initiate'] = nummaxupload+10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -