Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 运行时错误:事件循环正在运行_Python 3.x_Python Asyncio - Fatal编程技术网

Python 3.x 运行时错误:事件循环正在运行

Python 3.x 运行时错误:事件循环正在运行,python-3.x,python-asyncio,Python 3.x,Python Asyncio,调用函数send\u 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._tar

调用函数
send\u 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.
My function
send_message
接收消息并将其发送到不协调频道。 该函数是从线程中运行的函数调用的。客户端对象是在主线程中创建的

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

    client.loop.run_until_complete(client.send_message(SERVER,message))
“Event loop is running”(事件循环正在运行)异常表示您调用了
循环。在已经运行的循环上运行,\u直到完成为止,可能是在另一个线程中

  • 如果循环已在另一个线程中运行,并且您希望提交一个协同程序以供执行,请使用:

    asyncio.run_coroutine_threadsafe(client.send_message(SERVER, message), client.loop)
    
  • 如果您试图向循环中添加一个协程,并且该循环在当前线程上运行,那么最好的方法可能是等待它屈服

  • 如果您是通过同步功能进行调度,则 可能需要:

    asyncio.ensure_future(
        client.send_message(SERVER, message),
        loop=client.loop
    ).add_done_callback(fn)
    
    其中,
    fn
    是一个函数,其唯一参数是由
    sure\u future
    创建的future,并在future完成后调用