使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待

Posted

技术标签:

【中文标题】使用 python 线程时出现协程错误,RuntimeWarning: coroutine \'time_messege\' 从未等待【英文标题】:Coroutine error when using threading with python, RuntimeWarning: coroutine 'time_messege' was never awaited使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待 【发布时间】:2021-08-01 23:43:34 【问题描述】:

他们知道如何在 python 中使用线程时修复这两个 ** 协程错误**:

C:\Users\PC0\Anaconda3\lib\threading.py:870: RuntimeWarning: coroutine 'time_messege' was never awaited
  self._target(*self._args, **self._kwargs)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

我从主脚本中的这个函数组装线程

    async def on_ready(self) -> None:

        print("Logged on as 0!".format(self.user))

        x = threading.Thread(target=time_messege) #Creo un thread independiente del main_thread
        x.start()

导入这个...:

from core.modules.greetings import time_messege
import threading
import asyncio

但还是不行:

import time, random, discord
from datetime import datetime
import asyncio


async def time_messege():

    alarmtime = "09:59"
    channel = bot.get_channel("814238156396298310")

    while True:
      
        lcltime = datetime.now().strftime('%H:%M')

        if lcltime == alarmtime:

            #aca pondria el code de detectar canal y enviar
            print("is time!")

            random_num = random.randint(1, 4)

            if answer_num == 1:
                await greeting_channel.send(f"""AA""")
            if answer_num == 2:
                await greeting_channel.send(f"""A""")
            if answer_num == 3:
                await greeting_channel.send(f"""B""")
            elif answer_num == 4:
                await greeting_channel.send(f"""c""")

            time.sleep(90)

        else:
            print("not yet")
            time.sleep(10)

事实是我不再明白为什么会出现这个错误,希望你能帮助我解决这两个错误。

【问题讨论】:

【参考方案1】:

time_message 是一个异步函数,但是当你启动它时,你并没有等待它。 但是我不建议在你的机器人中使用线程。 time.sleep 将导致您的机器人中的blocking。

discord.py 有自己的原生扩展来制作task loops。您应该检查一下,因为它适用于异步环境。

【讨论】:

以上是关于使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待的主要内容,如果未能解决你的问题,请参考以下文章

Python协程之Gevent

简述python进程,线程和协程的区别及应用场景

python协程

python----单线程实现并发之协程

Python并发编程——多线程与协程

Python进程线程和协程实战指归