【发布时间】:2020-10-22 00:04:19
【问题描述】:
我正在尝试将 asyncio 与线程一起用于 Discord Bot。我找到了 this 脚本,我根据自己的需要进行了更改:
import time
import threading as th
import asyncio
import discord
class discordvars(object):
client=discord.Client()
TOKEN=('---')
running_discordthread=False
discordloop = asyncio.get_event_loop()
discordloop.create_task(client.start(TOKEN))
discordthread=th.Thread(target=discordloop.run_forever)
def start():
if discordvars.running_discordthread==False:
discordvars.discordthread.start()
print("Discord-Client started...")
discordvars.running_discordthread=True
else:
print("Discord-CLient allready running...")
time.sleep(2)
def stop():
if discordvars.running_discordthread==True:
discordvars.discordloop.call_soon_threadsafe(discordvars.discordloop.stop())
print("Requestet Discord-Client stop!")
discordvars.discordthread.join()
print(discordvars.discordthread.isAlive())
time.sleep(1)
print("Discord-Client stopped...")
discordvars.running_discordthread=False
else:
print("Discord-Client not running...")
time.sleep(2)
@discordvars.client.event
async def on_message(message):
if message.content.startswith('!test'):
embed = discord.Embed(title="test", color=0x0071ce, description="test")
await message.channel.send(embed=embed)
使用 start() 函数启动脚本效果很好。使用 stop() 函数停止也可以以某种方式工作。如果我调用 stop() 函数,它会打印:“False”,所以我认为线程已停止。但是如果我再调用 start() 函数,我会得到一个错误:
RuntimeError: 线程只能启动一次
这个脚本是一个大项目的一部分,所以我从另一个脚本调用函数。但我认为这不应该是问题。
有什么问题?提前致谢。
【问题讨论】:
标签: python python-asyncio python-multithreading