Volevo utilizzare uno ThreadPoolExecutor da un python coroutine per delegare alcune chiamate di rete di blocco a un thread separato. Tuttavia, l'esecuzione il codice seguente:Attesa futuro dall'esecutore: Futuro non può essere utilizzato nell'espressione 'attendi'
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()
cause di errore:
TypeError: object Future can't be used in 'await' expression
non sono Future
oggetti awaitable? Perché dice che non lo sono?
Come posso await
un oggetto Future
restituito da executor.submit
?
Python 3.5.0
EDIT
Utilizzando executor.submit
non è la mia decisione. Questo è usato internamente da diverse librerie, come requests-futures
. Sto cercando un modo per interoperare con questi moduli con le coroutine.
Non so perché il downvote. Questo certamente funziona. Comunque sono più interessato a * perché * piuttosto che a * come *. Inoltre, io uso la libreria delle richieste future, che usa invia internamente. –
Il semplice * perché * è 'concurrent.futures.Future' non è attendibile. Stai pensando a 'asyncio.Future'. –
Ok, quindi abbiamo diversi tipi chiamati Future. C'è una conversione tra questi tipi? –