【问题标题】:Python while loop isn't doing what it's supposed to [duplicate]Python while循环没有做它应该做的事情[重复]
【发布时间】:2017-07-10 11:16:20
【问题描述】:

所有非本地变量都位于模块下代码的顶部。 我正在使用多线程同时使用多个函数,即使将其与其他循环进行比较,我也无法弄清楚它为什么不起作用。

def SQUIRE():
global currency
global alive
global squire
while alive == True and squire == True:
    chanceA = random.randint(1, 100)
    if chanceA <= 10:
        currency += 10
        print("You have delivered a message for 10 currency. You now own", currency, " currency.")
        time.sleep(1)

它应该检查 man() alive = True 并且如果 squire = true,选择一个介于 1 和 100 之间的随机数。如果该数字介于 1 和 10 之间,则将 10 添加到货币中。 相反,它什么也没做。

https://pastebin.com/twxNmeDF

这是完整的代码供参考。 这可能是一团糟,这只是我在学习 Python 时正在做的副业。才用了几天

【问题讨论】:

  • 如果你只是在学习 Python,那么你当然不应该搞乱线程。 (事实上​​,如果您也是专家,也可以这样做......)
  • 您真的希望所有这些事情同时发生吗?你能一次做一步吗(也许收益会有所帮助)

标签: python multithreading python-3.x loops while-loop


【解决方案1】:

似乎发生的事情是squireFalse,因此循环不会执行。

在使用线程时,您应该注意,通常不能保证线程将按特定顺序执行,它们实际上是并行运行的,并且SQUIRE 线程可能会通过 @ 的测试987654324@ 变量在任何其他线程能够将其更改为 True 之前。

【讨论】:

    【解决方案2】:

    当您使用多个线程时,您应该等待线程池中的每个线程完成对资源的访问。因此,您应该在启动线程后使用t.join()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多