Log lock waits for task adding in WorkerManager

This commit is contained in:
shortcutme 2019-12-21 02:56:42 +01:00
parent 7ca09ba75b
commit 0881e274a9
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE
2 changed files with 26 additions and 1 deletions

24
src/Debug/DebugLock.py Normal file
View file

@ -0,0 +1,24 @@
import time
import logging
import gevent.lock
from Debug import Debug
class DebugLock:
def __init__(self, log_after=0.01, name="Lock"):
self.name = name
self.log_after = log_after
self.lock = gevent.lock.Semaphore(1)
self.release = self.lock.release
def acquire(self, *args, **kwargs):
s = time.time()
res = self.lock.acquire(*args, **kwargs)
time_taken = time.time() - s
if time_taken >= self.log_after:
logging.debug("%s: Waited %.3fs after called by %s" %
(self.name, time_taken, Debug.formatStack())
)
return res

View file

@ -9,6 +9,7 @@ from .WorkerTaskManager import WorkerTaskManager
from Config import config from Config import config
from util import helper from util import helper
from Plugin import PluginManager from Plugin import PluginManager
from Debug.DebugLock import DebugLock
import util import util
@ -20,7 +21,7 @@ class WorkerManager(object):
self.workers = {} # Key: ip:port, Value: Worker.Worker self.workers = {} # Key: ip:port, Value: Worker.Worker
self.tasks = WorkerTaskManager() self.tasks = WorkerTaskManager()
self.next_task_id = 1 self.next_task_id = 1
self.lock_add_task = gevent.lock.Semaphore(1) self.lock_add_task = DebugLock()
# {"id": 1, "evt": evt, "workers_num": 0, "site": self.site, "inner_path": inner_path, "done": False, "optional_hash_id": None, # {"id": 1, "evt": evt, "workers_num": 0, "site": self.site, "inner_path": inner_path, "done": False, "optional_hash_id": None,
# "time_started": None, "time_added": time.time(), "peers": peers, "priority": 0, "failed": peer_ids, "lock": None or gevent.lock.RLock} # "time_started": None, "time_added": time.time(), "peers": peers, "priority": 0, "failed": peer_ids, "lock": None or gevent.lock.RLock}
self.started_task_num = 0 # Last added task num self.started_task_num = 0 # Last added task num