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
..
2024-09-18 15:48:38 +00: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-02-19 14:27:45 +01: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-06-15 18:25:42 +00:00
2025-09-24 13:46:35 +00:00
2025-09-11 17:01:52 +00:00
2024-05-30 13:08:13 +00:00
2025-08-15 17:29:55 +00:00
2025-08-01 18:53:03 +00:00
2025-06-09 19:34:34 +00:00
2025-04-30 11:24:46 +02: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-05-21 09:52:57 +02:00
2025-06-03 18:58:05 +00:00
2024-10-17 18:26:47 +00:00
2025-09-03 14:14:22 +00:00
2025-08-18 17:02:34 +00:00
2025-05-21 18:41:25 +00:00
2025-05-16 17:09:41 +02:00
2025-05-05 15:01:11 +00:00
2025-08-19 14:16:32 +02:00
2025-04-18 00:54:30 +00:00
2025-07-07 14:26:18 +00:00
2025-10-27 18:09:33 +00:00
2025-05-19 10:49:30 +02:00
2025-07-15 14:03:48 +00:00
2025-09-08 17:12:24 +00:00
2025-05-02 15:57:01 +02:00
2025-09-29 16:11:07 +00:00
2025-05-02 15:57:01 +02:00
2025-02-19 14:29:50 +01:00
2025-09-29 17:13:27 +00:00
2025-09-30 09:54:24 +02:00
2025-06-03 10:06:39 +02:00
2025-04-14 19:20:11 +02:00
2025-09-29 16:11:26 +00:00
2025-04-02 16:21:59 +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-04-23 16:09:31 +02:00
2025-05-20 17:34:48 +02:00
2025-10-27 18:46:36 +01:00
2025-07-18 00:42:09 +00:00
2025-02-20 17:17:14 +01:00
2025-08-27 15:31:43 +02:00
2024-11-29 17:09:29 +08:00
2025-09-12 22:49:02 -07:00
2025-06-10 16:14:04 +02:00
2025-09-13 23:12:44 -04:00
2024-01-16 16:25:33 +01:00
2024-04-24 14:14:31 +00:00
2025-08-20 17:57:05 +00:00
2024-05-20 16:57:11 +02: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-04-23 16:09:31 +02: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
2025-04-23 16:09:31 +02:00