summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2019-10-29 15:02:23 +0000
committerErik Johnston <erik@matrix.org>2019-10-29 15:02:23 +0000
commit09a135b0391a7a65c24c8c7b046cb6573dee3947 (patch)
tree9dc82b8d05f89b636e768bc0dea7d2c7ad526136
parentNewsfile (diff)
downloadsynapse-09a135b0391a7a65c24c8c7b046cb6573dee3947.tar.xz
Make concurrently_execute work with async/await
-rw-r--r--synapse/util/async_helpers.py7
1 files changed, 3 insertions, 4 deletions
diff --git a/synapse/util/async_helpers.py b/synapse/util/async_helpers.py
index 804dbca443..7659eaeb42 100644
--- a/synapse/util/async_helpers.py
+++ b/synapse/util/async_helpers.py
@@ -138,7 +138,7 @@ def concurrently_execute(func, args, limit):
     the number of concurrent executions.
 
     Args:
-        func (func): Function to execute, should return a deferred.
+        func (func): Function to execute, should return a deferred or coroutine.
         args (list): List of arguments to pass to func, each invocation of func
             gets a signle argument.
         limit (int): Maximum number of conccurent executions.
@@ -148,11 +148,10 @@ def concurrently_execute(func, args, limit):
     """
     it = iter(args)
 
-    @defer.inlineCallbacks
-    def _concurrently_execute_inner():
+    async def _concurrently_execute_inner():
         try:
             while True:
-                yield func(next(it))
+                await maybe_awaitable(func(next(it)))
         except StopIteration:
             pass