mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 00:49:33 +02:00
bitbake: asyncrpc: Add context manager API
Adds context manager API for the asyncrcp client class which allow
writing code that will automatically close the connection like so:
with hashserv.create_client(address) as client:
...
Rework the bitbake-hashclient tool and PR server to use this new API to
fix warnings about unclosed event loops when exiting
(Bitbake rev: 52226a7244968c8dad6f4ee9ccec57ac1979217a)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit d01d684a0f6398270fe35ed59b7d28f3fd9b7e41)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
committed by
Steve Sakoman
parent
f768ffb891
commit
afe1706a77
@@ -56,25 +56,24 @@ def main():
|
|||||||
nonlocal missed_hashes
|
nonlocal missed_hashes
|
||||||
nonlocal max_time
|
nonlocal max_time
|
||||||
|
|
||||||
client = hashserv.create_client(args.address)
|
with hashserv.create_client(args.address) as client:
|
||||||
|
for i in range(args.requests):
|
||||||
|
taskhash = hashlib.sha256()
|
||||||
|
taskhash.update(args.taskhash_seed.encode('utf-8'))
|
||||||
|
taskhash.update(str(i).encode('utf-8'))
|
||||||
|
|
||||||
for i in range(args.requests):
|
start_time = time.perf_counter()
|
||||||
taskhash = hashlib.sha256()
|
l = client.get_unihash(METHOD, taskhash.hexdigest())
|
||||||
taskhash.update(args.taskhash_seed.encode('utf-8'))
|
elapsed = time.perf_counter() - start_time
|
||||||
taskhash.update(str(i).encode('utf-8'))
|
|
||||||
|
|
||||||
start_time = time.perf_counter()
|
with lock:
|
||||||
l = client.get_unihash(METHOD, taskhash.hexdigest())
|
if l:
|
||||||
elapsed = time.perf_counter() - start_time
|
found_hashes += 1
|
||||||
|
else:
|
||||||
|
missed_hashes += 1
|
||||||
|
|
||||||
with lock:
|
max_time = max(elapsed, max_time)
|
||||||
if l:
|
pbar.update()
|
||||||
found_hashes += 1
|
|
||||||
else:
|
|
||||||
missed_hashes += 1
|
|
||||||
|
|
||||||
max_time = max(elapsed, max_time)
|
|
||||||
pbar.update()
|
|
||||||
|
|
||||||
max_time = 0
|
max_time = 0
|
||||||
found_hashes = 0
|
found_hashes = 0
|
||||||
@@ -174,9 +173,8 @@ def main():
|
|||||||
|
|
||||||
func = getattr(args, 'func', None)
|
func = getattr(args, 'func', None)
|
||||||
if func:
|
if func:
|
||||||
client = hashserv.create_client(args.address)
|
with hashserv.create_client(args.address) as client:
|
||||||
|
return func(args, client)
|
||||||
return func(args, client)
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -126,6 +126,12 @@ class AsyncClient(object):
|
|||||||
{'ping': {}}
|
{'ping': {}}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def __aenter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
async def __aexit__(self, exc_type, exc_value, traceback):
|
||||||
|
await self.close()
|
||||||
|
|
||||||
|
|
||||||
class Client(object):
|
class Client(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -176,3 +182,10 @@ class Client(object):
|
|||||||
if sys.version_info >= (3, 6):
|
if sys.version_info >= (3, 6):
|
||||||
self.loop.run_until_complete(self.loop.shutdown_asyncgens())
|
self.loop.run_until_complete(self.loop.shutdown_asyncgens())
|
||||||
self.loop.close()
|
self.loop.close()
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, traceback):
|
||||||
|
self.close()
|
||||||
|
return False
|
||||||
|
|||||||
@@ -344,9 +344,9 @@ def auto_shutdown():
|
|||||||
def ping(host, port):
|
def ping(host, port):
|
||||||
from . import client
|
from . import client
|
||||||
|
|
||||||
conn = client.PRClient()
|
with client.PRClient() as conn:
|
||||||
conn.connect_tcp(host, port)
|
conn.connect_tcp(host, port)
|
||||||
return conn.ping()
|
return conn.ping()
|
||||||
|
|
||||||
def connect(host, port):
|
def connect(host, port):
|
||||||
from . import client
|
from . import client
|
||||||
|
|||||||
Reference in New Issue
Block a user