Skip to content

Commit 9043a51

Browse files
author
Rémy Noel
committed
Avoid loading the base interface each time a client is created
AFAIK, Interface is never modified after creation, so sharing the base interface between clients should be completely fine (and save some io and parsing).
1 parent a5abf56 commit 9043a51

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

varlink/client.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import functools
12
import importlib.resources
23
import json
34
import os
@@ -328,6 +329,16 @@ class Client:
328329

329330
handler = SimpleClientInterfaceHandler
330331

332+
# Lazy-loaded base varlink interface
333+
_varlink_base_interface = None
334+
335+
@classmethod
336+
@functools.lru_cache(maxsize=1)
337+
def _get_base_interface(cls):
338+
return Interface(
339+
importlib.resources.read_text("varlink", "org.varlink.service.varlink")
340+
)
341+
331342
def __init__(self, address=None, resolve_interface=None, resolver=None):
332343
"""Creates a Client object to reach the interfaces of a varlink service.
333344
For more constructors see the class constructor methods new_with_*() returning an Client object.
@@ -345,10 +356,7 @@ def __init__(self, address=None, resolve_interface=None, resolver=None):
345356
self._child_pid = 0
346357
self._str = "Client<uninitialized>"
347358

348-
interface = Interface(
349-
importlib.resources.read_text("varlink", "org.varlink.service.varlink")
350-
)
351-
self.add_interface(interface)
359+
self.add_interface(self._get_base_interface())
352360

353361
if resolve_interface:
354362
self._with_interface(resolve_interface, resolver)

0 commit comments

Comments
 (0)