【问题标题】:How do I stop a loop using a command in discord?如何在不和谐中使用命令停止循环?
【发布时间】:2021-10-05 15:04:36
【问题描述】:
if message.content.startswith("*run"):
    ticker = message.content[5:]
    try:
      df = exchange.fetch_ohlcv(ticker)
      await message.channel.send('Read Command: will send message if long or short opportunity arises!')
      valid = True
    except:
      await message.channel.send('Invalid ticker')
    if valid == True:
      bars = exchange.fetch_ohlcv(ticker, timeframe='5m', limit=210)
      df = pd.DataFrame(bars, columns=['time','high', 'low', 'open','close', 'volume'])
      close = df.iloc[-1]['close'] 
      while valid == True:
        if message.content == "*stop":
          valid = False
        trade = strat1(ticker)

上面的代码是一个不和谐的机器人,我和一个朋友正在为一个业余项目工作。我的问题出在代码的最后几行,

while valid == True:
    if message.content == "*stop":
      valid = False:

当用户在 discord 中输入 *run (ticker) 时,代码会搜索数据以查看该ticker 是否有效,然后根据响应运行一个循环。在那个循环中,我希望用户可以选择停止它而不必完全关闭机器人,但我似乎无法让它注册 *stop 命令。每次我运行它时,它都会完全超越该命令。所以,如果有人知道如何解决这个问题,请告诉我。

感谢您的阅读。

【问题讨论】:

    标签: python loops discord discord.py bots


    【解决方案1】:

    您想要做的是中断正在运行的执行。要在 Python 中执行此操作,您需要使用多处理算法。

    你可以尝试使用multiprocessing模块,

    首先,设计一个主线程来监听 discord 服务器中的命令,您已经这样做了。

    然后你想把需要在命令之后运行的实际服务放在一个函数中

    def thread_worker():
      bars = exchange.fetch_ohlcv(ticker, timeframe='5m', limit=210)
      df = pd.DataFrame(bars, columns=['time','high', 'low', 'open','close', 'volume'])
      close = df.iloc[-1]['close']
      trade = strat1(ticker)
    

    那么当收到启动命令时,就可以启动一个新进程,运行相应的作业

    newProcess = multiprocessing.Process(target=thread_worker)
    newProcess.start()
    

    当你的主线程收到终止信号时

    newProcess.terminate()
    

    【讨论】:

    • 您介意解释如何获取多处理模块吗?我们正在对 repli 进行编码,但我们不断收到错误消息。如果没有解决方案,您能否推荐一种替代方法?
    猜你喜欢
    • 2021-08-19
    • 2019-11-15
    • 1970-01-01
    • 2022-01-11
    • 2017-11-16
    • 1970-01-01
    • 2020-11-02
    • 2021-09-18
    • 2010-12-25
    相关资源
    最近更新 更多