Resolve asyncio + multiprocessing problem

This commit is contained in:
kuratowski 2019-02-05 01:01:39 +09:00 committed by Carlton Gibson
parent d3630e0925
commit 13abad2f89
2 changed files with 11 additions and 0 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.idea/
*.egg-info
*.pyc
__pycache__

View File

@ -122,6 +122,16 @@ class DaphneProcess(multiprocessing.Process):
def run(self):
try:
# Renew the asyncio event loop without anyone knowing.
# This is necessary because asyncio behaves badly with multiprocessing.
from twisted.internet import asyncioreactor
import sys
current_reactor = sys.modules.get("twisted.internet.reactor")
if isinstance(current_reactor, asyncioreactor.AsyncioSelectorReactor):
import asyncio
current_reactor._asyncioEventloop.close()
asyncio.set_event_loop(asyncio.new_event_loop())
current_reactor._asyncioEventloop = asyncio.get_event_loop()
# Create the server class
endpoints = build_endpoint_description_strings(host=self.host, port=0)
self.server = Server(