diff --git a/src/Worker/WorkerManager.py b/src/Worker/WorkerManager.py index 9f2d34fa..6a58fc54 100644 --- a/src/Worker/WorkerManager.py +++ b/src/Worker/WorkerManager.py @@ -77,18 +77,22 @@ class WorkerManager(object): ) task["site"].announce(mode="more") # Find more peers if task["optional_hash_id"]: - if not task["time_started"]: - ask_limit = 20 - elif task["priority"] > 0: - ask_limit = max(10, time.time() - task["time_started"]) - else: - ask_limit = max(10, (time.time() - task["time_started"]) / 2) - if len(self.asked_peers) < ask_limit and len(task["peers"] or []) <= len(task["failed"]) * 2: - # Re-search for high priority - self.startFindOptional(find_more=True) + if self.workers: + if not task["time_started"]: + ask_limit = 20 + elif task["priority"] > 0: + ask_limit = max(10, time.time() - task["time_started"]) + else: + ask_limit = max(10, (time.time() - task["time_started"]) / 2) + if len(self.asked_peers) < ask_limit and len(task["peers"] or []) <= len(task["failed"]) * 2: + # Re-search for high priority + self.startFindOptional(find_more=True) elif task["peers"]: - if not self.workers: - self.startWorkers([peer for peer in task["peers"] if peer not in task["failed"]]) + peers_try = [peer for peer in task["peers"] if peer not in task["failed"]] + if peers_try: + self.startWorkers(peers_try) + else: + self.startFindOptional(find_more=True) else: if task["peers"]: # Release the peer lock self.log.debug("Task peer lock release: %s" % task["inner_path"])