2017-08-09 21 views
6

Khi cố gắng để chạy các ví dụ asyncio chào đang trên thế giới được đưa ra trong các tài liệu:Asyncio Event Vòng được đóng

import asyncio 

async def hello_world(): 
    print("Hello World!") 

loop = asyncio.get_event_loop() 
# Blocking call which returns when the hello_world() coroutine is done 
loop.run_until_complete(hello_world()) 
loop.close() 

tôi nhận được lỗi:

RuntimeError: Event loop is closed 

Tôi đang sử dụng python 3.5.3.

Trả lời

12

Bạn đã gọi loop.close() trước khi bạn chạy mà mảnh mẫu mã, trên vòng lặp sự kiện toàn cầu:

>>> import asyncio 
>>> asyncio.get_event_loop().close() 
>>> asyncio.get_event_loop().is_closed() 
True 
>>> asyncio.get_event_loop().run_until_complete(asyncio.sleep(1)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/.../lib/python3.6/asyncio/base_events.py", line 443, in run_until_complete 
    self._check_closed() 
    File "/.../lib/python3.6/asyncio/base_events.py", line 357, in _check_closed 
    raise RuntimeError('Event loop is closed') 
RuntimeError: Event loop is closed 

Bạn cần phải tạo một vòng lặp mới:

loop = asyncio.new_event_loop() 

Bạn có thể đặt làm vòng lặp toàn cầu mới với:

asyncio.set_event_loop(asyncio.new_event_loop()) 

và sau đó chỉ cần sử dụng lại asyncio.get_event_loop().

Hoặc, chỉ cần khởi động lại trình thông dịch Python của bạn, lần đầu tiên bạn cố gắng lấy vòng lặp sự kiện toàn cầu, bạn sẽ nhận được vòng lặp mới, không được tiết lộ.

Các vấn đề liên quan