Skip to content

Commit bf25e70

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 bf25e70

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

varlink/client.py

Lines changed: 9 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,13 @@ class Client:
328329

329330
handler = SimpleClientInterfaceHandler
330331

332+
@classmethod
333+
@functools.lru_cache(maxsize=1)
334+
def _get_base_interface(cls):
335+
return Interface(
336+
importlib.resources.read_text("varlink", "org.varlink.service.varlink")
337+
)
338+
331339
def __init__(self, address=None, resolve_interface=None, resolver=None):
332340
"""Creates a Client object to reach the interfaces of a varlink service.
333341
For more constructors see the class constructor methods new_with_*() returning an Client object.
@@ -345,10 +353,7 @@ def __init__(self, address=None, resolve_interface=None, resolver=None):
345353
self._child_pid = 0
346354
self._str = "Client<uninitialized>"
347355

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

353358
if resolve_interface:
354359
self._with_interface(resolve_interface, resolver)

0 commit comments

Comments
 (0)