运行时错误:事件循环正在运行 [英] Runtime error: Event loop is running

查看:18
本文介绍了运行时错误:事件循环正在运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

调用函数send_message时出现以下错误。

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/home/joffe/Documents/discord/irc/ircbot.py", line 44, in get_message
    mydiscord.send_message(line[1])
  File "/home/joffe/Documents/discord/irc/mydiscord.py", line 37, in send_message
    client.loop.run_until_complete(client.send_message(SERVER,message))
  File "/usr/lib/python3.4/asyncio/base_events.py", line 331, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.4/asyncio/base_events.py", line 296, in run_forever
    raise RuntimeError('Event loop is running.')
RuntimeError: Event loop is running.

我的函数send_message接受消息并将其发送到不和谐频道。 该函数是从线程中运行的函数调用的。客户端对象在主线程中创建。

def send_message(message):
    print(str.encode("Message to discord: " + message))

    client.loop.run_until_complete(client.send_message(SERVER,message))

推荐答案

"事件循环正在运行"异常指示您对已在运行的循环(可能是在另一个线程中)调用了loop.run_until_complete

  1. 如果循环已在另一个线程中运行,并且您要提交协程以便执行,请使用:

    asyncio.run_coroutine_threadsafe(client.send_message(SERVER, message), client.loop)
    
  2. 如果您尝试将协程添加到循环中,并且该循环正在当前线程上运行,则最好的方法可能是只运行await/yield from

  3. 如果您从同步函数调度它,则 可能需要:

    asyncio.ensure_future(
        client.send_message(SERVER, message),
        loop=client.loop
    ).add_done_callback(fn)
    

    其中fn是一个函数,其唯一参数是由ensure_future创建并在将来完成后调用的未来。

这篇关于运行时错误:事件循环正在运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆