homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author aeros
Recipients aeros, asvetlov, vstinner, yselivanov
Date 2020年04月01日.20:19:49
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1585772389.71.0.412184895317.issue40115@roundup.psfhosted.org>
In-reply-to
Content
I was able to find a fix! Specifically, I think the issue was a subtle problem with test_run_in_executor_cancel: it never properly shuts down the executor prior to closing the event loop. 
We do this in asyncio.run() (with the loop.shutdown_default_executor() that I added last year), but it should be called explicitly when using loop.close() directly. Otherwise, the resources of the executor may not be cleaned up properly. I think the issue was being covered up because of the usage of daemon threads in the ThreadPoolExecutor, but revealed itself when the workers were converted to non-daemon threads since they require proper cleanup.
The change is very minimal:
```
 def test_run_in_executor_cancel(self):
 called = False
 def patched_call_soon(*args):
 nonlocal called
 called = True
 def run():
 time.sleep(0.05)
 f2 = self.loop.run_in_executor(None, run)
 f2.cancel()
+ self.loop.run_until_complete(
+ self.loop.shutdown_default_executor())
 self.loop.close()
 self.loop.call_soon = patched_call_soon
 self.loop.call_soon_threadsafe = patched_call_soon
 time.sleep(0.4)
 self.assertFalse(called)
```
Before change:
```
[aeros:~/repos/aeros-cpython]$ ./python -m test --fail-env-changed -R 3:3 test_asyncio -m test.test_asyncio.test_events.EPollEventLoopTests.test_run_in_executor_cancel
0:00:00 load avg: 0.63 Run tests sequentially
0:00:00 load avg: 0.63 [1/1] test_asyncio
beginning 6 repetitions
123456
......
test_asyncio leaked [1, 1, 1] references, sum=3
test_asyncio leaked [2, 1, 1] memory blocks, sum=4
test_asyncio failed
== Tests result: FAILURE ==
1 test failed:
 test_asyncio
Total duration: 3.2 sec
Tests result: FAILURE
```
After change:
```
[aeros:~/repos/aeros-cpython]$ ./python -m test --fail-env-changed -R 3:3 test_asyncio -m test.test_asyncio.test_events.EPollEventLoopTests.test_run_in_executor_cancel
0:00:00 load avg: 0.24 Run tests sequentially
0:00:00 load avg: 0.24 [1/1] test_asyncio
beginning 6 repetitions
123456
......
== Tests result: SUCCESS ==
1 test OK.
Total duration: 3.5 sec
Tests result: SUCCESS
```
I'll also test the PR using the `test-with-buildbots` label to double check, it should be attached to this issue within the next couple of hours.
History
Date User Action Args
2020年04月01日 20:19:49aerossetrecipients: + aeros, vstinner, asvetlov, yselivanov
2020年04月01日 20:19:49aerossetmessageid: <1585772389.71.0.412184895317.issue40115@roundup.psfhosted.org>
2020年04月01日 20:19:49aeroslinkissue40115 messages
2020年04月01日 20:19:49aeroscreate

AltStyle によって変換されたページ (->オリジナル) /