web-dev-qa-db-ja.com

python 3.6およびValueError:ループ引数は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
12
Tampa
loop = asyncio.new_event_loop()

新しいイベントループを作成し、それをどこにでも渡したくない場合は、このループをコンテキストに対して最新のものにする必要もあります。

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