from asyncio import create_task, get_event_loop, sleep
class Timer:
def __init__(self, color: bool):
self.seconds: int = 900
self.expires: bool = color
self.color = lambda x: "белых" if color else "чёрных"
get_event_loop().run_until_complete(self.start_timer())
async def start_timer(self):
"""Запускает цикл событий"""
await create_task(self.update_timer())
async def update_timer(self):
"""Ведёт время отсчёта"""
while self.seconds:
if self.expires:
self.seconds -= 1
await sleep(1)
assert self.seconds, f"Закончилось время у {self.color}. Противоположный игрок победил"
def flip_the_timer(self):
"""Меняет положение таймера (активный/деактивный)"""
self.expires = not self.expires
def get_timeset(self) -> str:
""":return время в виде таймера на электронных часах"""
return f"{round(self.seconds / 60)}:{self.seconds % 60}"
上面的问题代码
一直有异步的困扰,但总是悄悄突破,这周却遇上了某种杀手case
计时器启动,我没有捕获到错误,但即使由于异步,代码也没有更进一步,但计时器愚蠢地等待,而第二个计时器应该竞争性地启动,但它没有出现
我创建了一个任务,并在我没有尝试解决问题时立即启动它。
对异步比较友好的各位程序员,请帮忙!
下面是一个使用 asyncio.loop 的例子:
结果:
但就您而言,我认为线程更好: