Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步计时器函数在被调用两次时会阻塞自身

异步计时器函数在被调用两次时会阻塞自身
EN

Stack Overflow用户
提问于 2020-08-27 10:10:28
回答 1查看 190关注 0票数 1

我目前正在尝试实现一个功能到我的不和谐机器人,在那里,我可以很容易地删除发送的消息后,设置了几秒钟。

这是我的功能:

代码语言:javascript
运行
AI代码解释
复制
async def messageCountdown(context, message, counter):

    response = await context.send(f"**{'—' * counter}** \n {message}")

    for i in range(counter, 0, -1):
        await response.edit(content=f"**{'—' * i}** \n {message}")
        await asyncio.sleep(1)
    
    await context.message.delete()
    await response.delete()

函数调用:

代码语言:javascript
运行
AI代码解释
复制
@client.command()
async def test(context, *message):
    await messageCountdown(context, "Test", 10)

如果只调用一次:https://gyazo.com/3b1eef9ecf8ecbe6473e8b20dfcd19d1,则函数本身运行完全正常。

一旦我两次或更频繁地称其为倒计时,倒计时就会以一种奇怪的方式不一致地下降:https://gyazo.com/af4b23c5831ae90d5bc5a8461a22b0d7

我再次尝试了同样的方法,但是用time.sleep(1)代替了time.sleep(1),结果是一样的。这就是我不知道如何继续的地方,因为我发现asyncio应该解决这个问题,但它显然解决不了这个问题。而且,我也不明白为什么一个函数会阻塞相反的函数,因为异步和时间都不应该这样做,因为这个函数是异步的(这正好可以防止现在发生的事情,不是吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 17:29:47

这里的async函数没有问题。问题是API的费率限制不一致。

您可以调用该函数两次,因此它每秒钟编辑两次消息,而不是一次。

一旦达到了费率限制,机器人就会执行这个操作,但是由于费率限制,它还没有更新,一旦取消了利率限制,它就会立即更新消息,从而使它直接从步骤3跳到步骤1,从而导致消息的不一致更新。

阅读更多关于不和谐API速率限制的信息:here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63621920

复制
相关文章
同步、异步、阻塞、非阻塞
同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。
菲宇
2019/06/13
3.1K0
Python异步调用函数
Python2.x版本中,我们经常会用到异步的调用函数的功能,今天我们简单介绍一下异步执行Python函数的写法,要想实现异步调用Python函数,有几个概念需要了解。
AsiaYe
2019/12/10
3.9K0
同步 异步 阻塞 非阻塞
同步和阻塞完全不是一件事,是否同步指的是获取返回结果的方式,是否阻塞指的是等待获取结果的时间内是否可以干其他事情
东营浪人
2019/12/20
2.7K0
同步/异步,阻塞/非阻塞
什么是同步和异步 同步和异步是针对应用程序和内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。 什么是阻塞和非阻塞 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 同步/异步与阻塞/非阻塞的区别 同步与异步:针对数据访问的方式,程序是主动去询
欠扁的小篮子
2018/04/11
3.3K0
阻塞 & 非阻塞 | 同步 & 异步
一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用 recv 执行一个读操作,数据就绪就是远端是否有数据可读。
看、未来
2021/10/09
3K0
阻塞 & 非阻塞 | 同步 & 异步
同步、异步、阻塞、非阻塞
同步、异步、阻塞和非阻塞(网络编程) 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。 异步 异步的概念和同步相对。当
张俊怡
2018/04/24
2.3K0
IO - 同步,异步,阻塞,非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。 本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”,Stevens在这节中详细说明了各种IO的特点和区别,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。本文中的流程图也是截取自参考文献。
后端技术探索
2018/08/09
2.2K0
同步、异步、阻塞和非阻塞
同步和异步 同步:是用户线程发起IO请求需要等待或者轮询内核IO操作完成后才能继续执行。 异步:用户线程发起IO请求后任需要继续执行,当内核IO操作完成后会通知用户线程,或者调用用户注册的回调函数。
lexingsen
2022/02/25
2.2K0
同步异步阻塞非阻塞详解
同步就是一个调用方发出请求开始,就一直处于等待状态,等待请求结果返回后才能继续执行其他任务。比如说调用一个函数,等待函数结果返回,这叫同步。
opencode
2022/12/26
2K0
Python 实现异步调用函数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157350.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/08
1.6K0
Python 实现异步调用函数
async_call.py #coding:utf-8 from threading import Thread def async_call(fn): def wrapper(*args, **kwargs): Thread(target=fn, args=args, kwargs=kwargs).start() return wrapper test.py from time import sleep from async_call import async_call
py3study
2020/01/08
2K0
浅析同步异步阻塞非阻塞
企鹅号小编
2018/01/09
2K0
浅析同步异步阻塞非阻塞
同步、异步与阻塞、非阻塞
  同步和异步关注的是消息通信机制。同步就是在发出一个【调用】时,在没有拿到结果之前,该【调用】就不返回,但是一旦调用返回,就得到返回值了。
py3study
2020/01/16
2.2K0
深入理解--异步和非阻塞同步和阻塞异步和非阻塞
异步和非阻塞的概念实际上已经出现了很长一段时间。但是异步真正开始流行起来,是因为AJAX技术逐渐成为主流的web开发技术。非阻塞的概念真正流行起来,是当java引入NIO,也可以称作非阻塞IO的API,开始走进主流的开发人员的视线,真正流行起来,也可以认为是node.js带来的。
desperate633
2018/08/22
1.1K0
同步异步与阻塞非阻塞
标题有点简单粗暴,直接用了本文要介绍的几个概念。本来想取个高大上一点的标题,但是感觉主题不那么明了。
windealli
2018/07/21
1.9K0
同步异步与阻塞非阻塞
IO - 同步,异步,阻塞,非阻塞
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。 本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”,Stevens在这节中详细说明了各种IO的特点和区别,如果英文够好的话,推荐直接阅读。Stevens的文风是有名的深入浅出,所以不用担心看不懂。本文中的流程图也是截取自参考文献。
后端技术探索
2018/08/09
1.9K0
同步、异步与阻塞、非阻塞
同步与异步是基于消息和通信的概念。异步操作立即返回,操作完成后通知,而同步操作等待操作完成才返回(返回就相当于完成通知,也意味着没有通知)。
gojam
2019/11/11
1.5K0
同步与异步、阻塞与非阻塞
简单来说,同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系。
葆宁
2019/04/18
1.3K0
同步与异步,阻塞和非阻塞
Java 中的 BIO、NIO 和 AIO 可以理解为是 Java 语言对操作系统的各种 IO 模型的封装。在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码,只需要使用 Java 的 API 就可以了。
happyJared
2019/08/06
1.2K0
[PHP] class_exists类不存在时会调用__autoload函数
该函数的定义如下: class_exists ( string $class_name [, bool $autoload = true ] ) : bool 第二个参数就是表示是否自动调用autoload函数 class_name 类名。名字的匹配是不分区大小写的。 autoload 是否默认调用 __autoload。 当然现在建议使用下面的函数进行自动加载 spl_autoload_register(function ($class_name) { require_once $class_n
唯一Chat
2020/12/28
6210

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档