f321x
08673d3534
util: cleanup asyncio event loop after stopping
I noticed many ResourceWarning when running regtests with
PYTHONASYNCIODEBUG=1 and PYTHONDEVMODE=1, each time a daemon
gets stopped the asyncio loop wouldn't get properly cleaned up:
```
(env) user@hp:~/code/electrum-fork$ python3 -m unittest tests.regtest.TestLightningAB.test_lnwatcher_waits_until_fees_go_down
***** test_lnwatcher_waits_until_fees_go_down ******
initializing alice
0.67 | W | asyncio | Executing <Task finished name='Task-1' coro=<run_offline_command() done, defined at /home/user/code/electrum-fork/./run_electrum:229> result={'msg': 'Please keep ... your wallet.', 'path': '/tmp/alice/r...efault_wallet', 'seed': 'fiction sadd...it radar desk'} created at /home/user/code/electrum-fork/electrum/util.py:1760> took 0.280 seconds
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
funding alice
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
f84277454a04243e500cf84c67aad16e04dd7a88ffa849ffcf20ce3f9af277df
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
initializing bob
0.54 | W | asyncio | Executing <Task finished name='Task-1' coro=<run_offline_command() done, defined at /home/user/code/electrum-fork/./run_electrum:229> result={'msg': 'Please keep ... your wallet.', 'path': '/tmp/bob/reg...efault_wallet', 'seed': 'wink loud so...ory myth case'} created at /home/user/code/electrum-fork/electrum/util.py:1760> took 0.195 seconds
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
funding bob
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
f68b651e84dc8547f54dd09129018a2d0d256dedc8ccc48595ae172de895371a
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
mining 1 blocks
starting daemon (PID 38153)
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
/tmp/alice/regtest/wallets/default_wallet
/usr/lib64/python3.14/asyncio/base_events.py:758: ResourceWarning: unclosed event loop <_UnixSelectorEventLoop running=False closed=False debug=True>
```
This commits adds some cleanup to `util.create_and_start_event_loop()`
to
1. cancel remaining tasks
2. shut down asyncgens
3. shutdown the default executor
4. call loop.close() to free the resources allocated to the loop
See https://stackoverflow.com/questions/30765606/whats-the-correct-way-to-clean-up-after-an-interrupted-event-loop
This seems to reliably solve the mentioned `ResourceWarning`.
2025-10-28 14:53:35 +01:00
..
2025-08-14 15:59:11 +02:00
2025-10-27 18:46:36 +01:00
2025-07-21 02:40:17 +00:00
2025-08-23 18:59:14 +00:00
2025-09-30 09:54:35 +02:00
2025-07-15 12:30:06 +00:00
2025-09-24 13:46:35 +00:00
2025-09-11 17:01:52 +00:00
2025-08-15 17:29:55 +00:00
2025-08-01 18:53:03 +00:00
2025-08-18 15:38:25 +00:00
2025-10-09 15:31:04 +00:00
2025-08-14 15:59:11 +02:00
2025-09-03 14:14:22 +00:00
2025-08-18 17:02:34 +00:00
2025-08-19 14:16:32 +02:00
2025-10-27 18:09:33 +00:00
2025-07-15 14:03:48 +00:00
2025-09-08 17:12:24 +00:00
2025-09-29 16:11:07 +00:00
2025-09-29 17:13:27 +00:00
2025-09-30 09:54:24 +02:00
2025-09-29 16:11:26 +00:00
2025-08-27 17:36:51 +02:00
2025-09-30 09:54:35 +02:00
2025-07-15 22:53:35 +00:00
2025-09-24 13:46:24 +00:00
2025-10-09 15:06:23 +00:00
2025-08-20 17:57:05 +00:00
2025-08-08 14:34:53 +00:00
2025-10-27 18:46:36 +01:00
2025-07-18 00:42:09 +00:00
2025-08-27 15:31:43 +02:00
2025-09-12 22:49:02 -07:00
2025-09-13 23:12:44 -04:00
2025-08-20 17:57:05 +00:00
2025-09-05 19:51:33 +00:00
2025-09-30 09:54:35 +02:00
2025-09-08 15:01:50 +00:00
2025-10-09 14:57:41 +00:00
2025-10-09 14:57:41 +00:00
2025-10-28 14:53:35 +01:00
2025-09-24 13:46:24 +00:00
2025-08-24 18:03:20 +00:00
2025-09-30 09:54:35 +02:00
2025-10-09 15:31:04 +00:00
2025-08-15 20:52:49 +00:00