Ich wollte eine ThreadPoolExecutor von einem python coroutine verwenden, um einige blockierende Netzwerkaufrufe an einen separaten Thread zu delegieren. Allerdings läuft den folgenden Code:Zukunft erwarten von Executor: Future kann nicht in "erwarten" Ausdruck verwendet werden
from concurrent.futures import ThreadPoolExecutor
import asyncio
def work():
# do some blocking io
pass
async def main():
executor = ThreadPoolExecutor()
await executor.submit(work)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Ursachen Fehler:
TypeError: object Future can't be used in 'await' expression
Sind nicht Future
Objekte awaitable? Warum sagt es, dass sie es nicht sind? Wie kann ich await
ein Future
Objekt zurückgegeben von executor.submit
?
Python 3.5.0
EDIT
executor.submit
Verwendung ist nicht meine Entscheidung. Dies wird intern von mehreren Bibliotheken wie requests-futures
verwendet. Ich suche nach einer Möglichkeit, mit diesen Modulen aus Coroutinen zu interagieren.
Ich weiß nicht, warum der Downvote. Das funktioniert sicher. Aber ich interessiere mich mehr für * warum * als für * wie *. Außerdem verwende ich die Futures-Requests-Bibliothek, die intern sendet. –
Das einfache * warum * ist 'concurrent.futures.Future' ist nicht zu erwarten. Sie denken an 'asyncio.Future'. –
Okay, also haben wir verschiedene Typen namens Future. Gibt es eine Konvertierung zwischen diesen Typen? –