Faster findOptionalHashIds
This commit is contained in:
parent
5fafe7cf29
commit
7951763612
1 changed files with 7 additions and 3 deletions
|
@ -172,15 +172,19 @@ class WorkerManager(object):
|
||||||
return found
|
return found
|
||||||
|
|
||||||
# Find peers for optional hash ids in local hash tables
|
# Find peers for optional hash ids in local hash tables
|
||||||
def findOptionalHashIds(self, optional_hash_ids):
|
def findOptionalHashIds(self, optional_hash_ids, limit=0):
|
||||||
found = collections.defaultdict(list) # { found_hash_id: [peer1, peer2...], ...}
|
found = collections.defaultdict(list) # { found_hash_id: [peer1, peer2...], ...}
|
||||||
|
|
||||||
for peer in self.site.peers.values():
|
for peer in self.site.peers.values():
|
||||||
if not peer.hashfield:
|
if not peer.has_hashfield:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
hashfield_set = set(peer.hashfield) # Finding in set is much faster
|
||||||
for optional_hash_id in optional_hash_ids:
|
for optional_hash_id in optional_hash_ids:
|
||||||
if optional_hash_id in peer.hashfield:
|
if optional_hash_id in hashfield_set:
|
||||||
found[optional_hash_id].append(peer)
|
found[optional_hash_id].append(peer)
|
||||||
|
if limit and len(found[optional_hash_id]) >= limit:
|
||||||
|
optional_hash_ids.remove(optional_hash_id)
|
||||||
|
|
||||||
return found
|
return found
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue