diff --git a/packages/flamenco-worker-python/flamenco_worker/cli.py b/packages/flamenco-worker-python/flamenco_worker/cli.py
index 90e499c7aad439176186d255c54ada8098e3ad5d..9c2177a9d8f2444df666b3d912e8712f01ac7c81 100644
--- a/packages/flamenco-worker-python/flamenco_worker/cli.py
+++ b/packages/flamenco-worker-python/flamenco_worker/cli.py
@@ -54,7 +54,7 @@ def main():
     confparser = config.load_config(args.config, args.verbose)
 
     # Construct the AsyncIO loop
-    loop = asyncio.get_event_loop()
+    loop = construct_asyncio_loop()
     if args.verbose:
         log.debug('Enabling AsyncIO debugging')
         loop.set_debug(True)
@@ -111,5 +111,20 @@ def main():
     log.warning('Shutting down')
 
 
+def construct_asyncio_loop() -> asyncio.AbstractEventLoop:
+    # On Windows, the default event loop is SelectorEventLoop which does
+    # not support subprocesses. ProactorEventLoop should be used instead.
+    # Source: https://docs.python.org/3.5/library/asyncio-subprocess.html
+    import sys
+
+    if sys.platform == 'win32':
+        loop = asyncio.ProactorEventLoop()
+        asyncio.set_event_loop(loop)
+    else:
+        loop = asyncio.get_event_loop()
+
+    return loop
+
+
 if __name__ == '__main__':
     main()
diff --git a/packages/flamenco-worker-python/tests/test_upstream_update_queue.py b/packages/flamenco-worker-python/tests/test_upstream_update_queue.py
index 6f7536c271b805feb0b1b692e9e98b9dfbd4e754..9d5527f64ceba45fb74dbf86c75c610042f1a1bd 100644
--- a/packages/flamenco-worker-python/tests/test_upstream_update_queue.py
+++ b/packages/flamenco-worker-python/tests/test_upstream_update_queue.py
@@ -13,9 +13,10 @@ class TaskUpdateQueueTest(AbstractWorkerTest):
     def setUp(self):
         from flamenco_worker.upstream import FlamencoManager
         from flamenco_worker.upstream_update_queue import TaskUpdateQueue
+        from flamenco_worker.cli import construct_asyncio_loop
         from mock_responses import CoroMock
 
-        self.asyncio_loop = asyncio.get_event_loop()
+        self.asyncio_loop = construct_asyncio_loop()
         self.shutdown_future = self.asyncio_loop.create_future()
 
         self.manager = Mock(spec=FlamencoManager)
diff --git a/packages/flamenco-worker-python/tests/test_worker.py b/packages/flamenco-worker-python/tests/test_worker.py
index 228bef28e69ad9aa146d4f9f6a212b6bb5a3e548..89ef0209648a469e4b00e4b11ce1f73e14acf407 100644
--- a/packages/flamenco-worker-python/tests/test_worker.py
+++ b/packages/flamenco-worker-python/tests/test_worker.py
@@ -8,12 +8,13 @@ import requests
 
 class AbstractWorkerTest(unittest.TestCase):
     def setUp(self):
+        from flamenco_worker.cli import construct_asyncio_loop
         from flamenco_worker.upstream import FlamencoManager
         from flamenco_worker.worker import FlamencoWorker
         from flamenco_worker.runner import TaskRunner
         from flamenco_worker.upstream_update_queue import TaskUpdateQueue
 
-        self.asyncio_loop = asyncio.get_event_loop()
+        self.asyncio_loop = construct_asyncio_loop()
         self.shutdown_future = self.asyncio_loop.create_future()
 
         self.manager = Mock(spec=FlamencoManager)
@@ -116,7 +117,9 @@ class WorkerStartupTest(AbstractWorkerTest):
 class TestWorkerTaskFetch(AbstractWorkerTest):
     def setUp(self):
         super().setUp()
-        self.loop = asyncio.get_event_loop()
+        from flamenco_worker.cli import construct_asyncio_loop
+
+        self.loop = construct_asyncio_loop()
         self.worker.loop = self.loop
 
     def run_loop_for(self, seconds: float):