holgern / pynostr

Python library for nostr

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Running "relay_manager.run_sync()" from a thread results in a freeze

opened this issue · comments

Code:

print("Posting hello world...")

event = Event(
    "hello world!",
    kind=EventKind.TEXT_NOTE
)

print("Event made")

event.sign(self.private_key.hex())

print("Event signed")

self.relay_manager.publish_event(event)
print("Event published")
while self.relay_manager.message_pool.has_ok_notices():
    ok_msg = self.relay_manager.message_pool.get_ok_notice()
    print("OK message", ok_msg)

while self.relay_manager.message_pool.has_notices():
    notice_msg = self.relay_manager.message_pool.get_notice()
    print("Notice", notice_msg.content)

while self.relay_manager.message_pool.has_events():
    event_msg = self.relay_manager.message_pool.get_event()
    print(event_msg.event.content)

self.relay_manager.run_sync()
print("Relays synced")

Terminal:

Posting hello world...
Event made
Event signed
Event published
.... nothing happens, until I CTRL-C
^CTraceback (most recent call last):
  File "/mnt/code/project/main.py", line 219, in <module>
    c.start()
  File "/mnt/code/project/main.py", line 216, in start
    input()
KeyboardInterrupt

I've tracked the problem down to here which seems to cause the freeze.

if modified a bit:

print("pre-yield")
try:
    yield future
except gen.TimeoutError:
    log.info(
       f"Connection to WebSocket client {relays[i].url} timed out"
    )
    # relays[i].on_error()                
print("post-yield")

It never gets to "post-yield".


The snippet which launches the thread:

thread = Thread(
    target=self.fetcher,
    name="fetcher",
    daemon=True # doesn't matter, setting it to False has the same issue
)

thread.start()

Debug information:

(env) project $ python3 --version
Python 3.11.3

(env) project $ uname -a
Linux host 6.1.31_1 #1 SMP PREEMPT_DYNAMIC Wed May 31 05:53:37 UTC 2023 x86_64 GNU/Linux

(env) project $ pip --version
pip 23.1.2 from /mnt/code/project/env/lib/python3.11/site-packages/pip (python 3.11)

(env) project $ pip freeze
asn1crypto==1.5.1
certifi==2023.5.7
cffi==1.15.1
charset-normalizer==3.1.0
click==8.1.3
coincurve==18.0.0
cryptography==41.0.1
dnspython==2.3.0
eventlet==0.33.3
greenlet==2.0.2
idna==3.4
markdown-it-py==2.2.0
mdurl==0.1.2
pycparser==2.21
Pygments==2.15.1
pynostr==0.6.2
python-socks==2.3.0
requests==2.31.0
rich==13.4.1
secp256k1==0.14.0
six==1.16.0
tlv8==0.10.0
tornado==6.3.2
typer==0.9.0
typing_extensions==4.6.2
urllib3==2.0.2
websocket-client==1.5.2