async 同步计时问题。。。
async def my_event_handler(event):global t_result
global stop_condition
stop_condition = True
ply = event.text
t_result={as:ply}
await client.disconnect()
return stop_condition,t_result
async def timer():
# 计时器代码
global t_result
global stop_condition
time.sleep(5)
stop_condition = False
print("timer Exception")
client.disconnect()
t_result={as:"超时,请稍后重试!"}
return stop_condition,t_result
with client:
client.run_until_disconnected()
return stop_condition,t_result
想加个async 同步计时, 超过5秒程序就直接返回超时,但现在加了async def timer(): 没效果,请大佬帮看下,感谢! 你可以使用 asyncio.sleep() 方法来实现异步计时器。下面是修改后的代码:
import asyncio
async def my_event_handler(event):
global t_result
global stop_condition
stop_condition = True
ply = event.text
t_result = {as:ply}
await client.disconnect()
return stop_condition, t_result
async def timer():
# 计时器代码
global t_result
global stop_condition
await asyncio.sleep(5)
stop_condition = False
print("timer Exception")
await client.disconnect()
t_result = {as:"超时,请稍后重试!"}
return stop_condition, t_result
loop = asyncio.get_event_loop()
tasks =
done, pending = loop.run_until_complete(asyncio.wait(tasks, timeout=5))
if len(done) == 0:
# 超时处理
stop_condition = False
t_result = {as:"超时,请稍后重试!"}
else:
# 处理结果
for task in done:
stop_condition, t_result = task.result()
loop.close()
return stop_condition, t_result
这里使用 asyncio.wait() 方法来同时等待事件处理和计时器任务的完成,设置超时时间为 5 秒。如果在超时时间内没有完成任务,则返回超时提示。如果完成了任务,则返回任务的结果。 根据你提供的代码,`timer()`函数似乎并没有被调用。为了使用异步计时器,你可以使用`asyncio.sleep()`函数。这里是一个可能会起作用的修改版本:
import asyncio
async def my_event_handler(event):
global t_result
global stop_condition
stop_condition = True
ply = event.text
t_result={as:ply}
await client.disconnect()
return stop_condition, t_result
async def timer():
# 计时器代码
global t_result
global stop_condition
await asyncio.sleep(5)# 使用asyncio.sleep()实现计时
stop_condition = False
print("timer Exception")
await client.disconnect()
t_result={as:"超时,请稍后重试!"}
return stop_condition,t_result
with client:
asyncio.ensure_future(timer())# 启动计时器的运行
client.run_until_disconnected()
return stop_condition,t_result
在上面的代码中,将计时器函数与事件处理程序串联起来,然后通过`asyncio.ensure_future()`函数启动计时器。这应该会在事件处理程序与计时器之间创建一个协程链,使其同时运行,并且在事件处理程序返回结果或者计时器完成时结束。
有用请设置最佳答案
页:
[1]