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