fix performance issue in proxywatchd
This commit is contained in:
@@ -158,16 +158,6 @@ class Proxywatchd():
|
|||||||
self.mysqlite.execute(query, (job.failcount, job.nextcheck, 1, "unknown", job.proto, job.duration, job.proxy))
|
self.mysqlite.execute(query, (job.failcount, job.nextcheck, 1, "unknown", job.proto, job.duration, job.proxy))
|
||||||
self.mysqlite.commit()
|
self.mysqlite.commit()
|
||||||
|
|
||||||
def find_best_thread(self):
|
|
||||||
least_jobs = 9999999999999999999
|
|
||||||
least_tid = 0
|
|
||||||
for i in range(len(self.threads)):
|
|
||||||
cnt = self.threads[i].jobcount()
|
|
||||||
if cnt < least_jobs:
|
|
||||||
least_jobs = cnt
|
|
||||||
least_tid = i
|
|
||||||
return least_tid
|
|
||||||
|
|
||||||
def run_background(self):
|
def run_background(self):
|
||||||
t = threading.Thread(target=self.run)
|
t = threading.Thread(target=self.run)
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
@@ -197,9 +187,12 @@ class Proxywatchd():
|
|||||||
|
|
||||||
if len(self.jobs) == 0:
|
if len(self.jobs) == 0:
|
||||||
self.prepare_jobs()
|
self.prepare_jobs()
|
||||||
while len(self.jobs):
|
if len(self.jobs):
|
||||||
tid = self.find_best_thread()
|
jpt = len(self.jobs)/config.watchd_threads
|
||||||
self.threads[tid].add_jobs([self.jobs.pop()])
|
if len(self.jobs)/float(config.watchd_threads) - jpt > 0.0: jpt += 1
|
||||||
|
for tid in range(config.watchd_threads):
|
||||||
|
self.threads[tid].add_jobs(self.jobs[tid*jpt:tid*jpt+jpt])
|
||||||
|
self.jobs = []
|
||||||
|
|
||||||
if config.watchd_threads == 1: # single_thread scenario
|
if config.watchd_threads == 1: # single_thread scenario
|
||||||
self.threads[0].workloop()
|
self.threads[0].workloop()
|
||||||
|
|||||||
Reference in New Issue
Block a user