2017-10-18 3 views
1

Je veux juste exécuter un exemple de test simple mais je reçois l'erreur ci-dessous. Comment puis-je résoudre?python 3.6 et ValueError: l'argument de boucle doit être d'accord avec Future

import asyncio 
import uvloop 
import concurrent.futures 
import time 
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) 

async def do_some_work(x): 

    while True: 
     print("Waiting " + str(x)) 
     await asyncio.sleep(x) 

if __name__ == '__main__': 


    loop = asyncio.new_event_loop() 
    tasks = [asyncio.ensure_future(do_some_work(2)), 
      asyncio.ensure_future(do_some_work(5))] 
    loop.run_until_complete(asyncio.gather(*tasks)) 

Traceback (most recent call last): 
    File "/Users/worker_why.py", line 23, in <module> 
    loop.run_until_complete(asyncio.gather(*tasks)) 
    File "uvloop/loop.pyx", line 1181, in uvloop.loop.Loop.run_until_complete (uvloop/loop.c:25184) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/tasks.py", line 508, in ensure_future 
    raise ValueError('loop argument must agree with Future') 
ValueError: loop argument must agree with Future 
+1

Avez-vous essayé de passer en boucle nouvellement créé 'Ensure_future'? 'asyncio.ensure_future (..., boucle = boucle)' – vaultah

Répondre

1
loop = asyncio.new_event_loop() 

Si vous créez une nouvelle boucle d'événements et ne veulent pas passer partout, vous devriez aussi faire de ce courant de boucle pour le contexte:

loop = asyncio.new_event_loop() 
asyncio.set_event_loop(loop)