Performance improvements (#19)

* fix: increase the wait time for re-connecting to a relay

* fix: blocking sleep

* fix: remove blocking sleep

* fix: allow multiple filters per request
This commit is contained in:
Vlad Stan 2023-09-12 15:06:28 +03:00 committed by GitHub
parent 9d9fbc0189
commit e6624f76bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 18 deletions

View file

@ -1,4 +1,4 @@
import time
import asyncio
from typing import List
from ..relay_manager import RelayManager
@ -21,7 +21,7 @@ class NostrClient:
def close(self):
self.relay_manager.close_connections()
def subscribe(
async def subscribe(
self,
callback_events_func=None,
callback_notices_func=None,
@ -41,4 +41,4 @@ class NostrClient:
if callback_eosenotices_func:
callback_eosenotices_func(event_msg)
time.sleep(0.1)
await asyncio.sleep(0.5)

View file

@ -1,3 +1,4 @@
import asyncio
import json
import time
from queue import Queue
@ -95,7 +96,7 @@ class Relay:
json_str = json.dumps(["REQ", s["id"], s["filters"][0]])
self.publish(json_str)
def queue_worker(self):
async def queue_worker(self):
while True:
if self.connected:
try:
@ -105,7 +106,7 @@ class Relay:
except:
pass
else:
time.sleep(0.1)
await asyncio.sleep(1)
if self.shutdown:
logger.warning(f"Closing queue worker for '{self.url}'.")

View file

@ -1,4 +1,5 @@
import asyncio
import ssl
import threading
import time
@ -95,20 +96,22 @@ class RelayManager:
)
self.threads[relay.url].start()
def wrap_async_queue_worker():
asyncio.run(relay.queue_worker())
self.queue_threads[relay.url] = threading.Thread(
target=relay.queue_worker,
target=wrap_async_queue_worker,
name=f"{relay.url}-queue",
daemon=True,
)
self.queue_threads[relay.url].start()
def _restart_relay(self, relay: Relay):
if relay.error_threshold_reached:
time_since_last_error = time.time() - relay.last_error_date
if time_since_last_error < 60 * 60 * 2: # last day
return
relay.error_counter = 0
relay.error_list = []
time_since_last_error = time.time() - relay.last_error_date
min_wait_time = min(60 * relay.error_counter, 60 * 60 * 24) # try at least once a day
if time_since_last_error < min_wait_time:
return
logger.info(f"Restarting connection to relay '{relay.url}'")