diff --git a/packages/flamenco-worker-python/flamenco_worker/cli.py b/packages/flamenco-worker-python/flamenco_worker/cli.py index 46544be0dfe4361cf722f643cb195f5001d58434..fbc80bb95baf5d6fe21e0028a4c1b7a5b14d3637 100644 --- a/packages/flamenco-worker-python/flamenco_worker/cli.py +++ b/packages/flamenco-worker-python/flamenco_worker/cli.py @@ -24,6 +24,10 @@ def main(): log = logging.getLogger(__name__) log.debug('Starting') + # Patch AsyncIO + from . import patch_asyncio + patch_asyncio.patch_asyncio() + # Construct the AsyncIO loop loop = construct_asyncio_loop() if args.verbose: diff --git a/packages/flamenco-worker-python/flamenco_worker/patch_asyncio.py b/packages/flamenco-worker-python/flamenco_worker/patch_asyncio.py new file mode 100644 index 0000000000000000000000000000000000000000..f4843c6cbc46c9f40b9f39f1d681abe5302e0d4b --- /dev/null +++ b/packages/flamenco-worker-python/flamenco_worker/patch_asyncio.py @@ -0,0 +1,29 @@ +""" +Patches a safer version of resume_reading into the asyncio.unix_events._UnixReadPipeTransport class. + +This prevents an error at the end of a subprocess execution: + + File "/usr/lib/python3.x/asyncio/unix_events.py", line 364, in resume_reading + self._loop.add_reader(self._fileno, self._read_ready) + AttributeError: 'NoneType' object has no attribute 'add_reader' + +""" + +import asyncio.unix_events as ue + + +def patch_asyncio(): + import logging + + log = logging.getLogger(__name__) + log.debug('Patching ue._UnixReadPipeTransport.resume_reading') + + orig_resume_reading = ue._UnixReadPipeTransport.resume_reading + + def resume_reading(self, *args, **kwargs): + if not self._loop: + return + + return orig_resume_reading(*args, **kwargs) + + ue._UnixReadPipeTransport.resume_reading = resume_reading