【问题标题】:Is it the right way to run 2 infiniteloop in python?这是在python中运行2个无限循环的正确方法吗?
【发布时间】:2021-03-01 09:13:08
【问题描述】:

我在 python 中编写了一个带有 2 个无限循环的代码,如下所示:

import threading 
import time 

ticker = 0

def ticking():
    global ticker
    while True:
        time.sleep(1)
        ticker +=1
        print("ticker = {}".format(ticker))

def main_line():
    while True:
        print("Hello world")
        time.sleep(4)

t1 = threading.Thread(target = ticking)
t2 = threading.Thread(target = main_line)

t1.start()
t2.start()

#t1.join()
if __name__ == "__main__":
    t1.join()
    #t2.join()

如果我不加入任何线程,它就不起作用,但是当我加入 1 个线程时,另一个线程也在工作,但我不知道为什么? 谁能帮我解释一下?

【问题讨论】:

    标签: python python-3.x multithreading infinite-loop python-multithreading


    【解决方案1】:

    Join 用于阻塞调用方法,直到线程结束、抛出异常或超时。

    join([timeout]) 等到线程终止。这阻止了 调用线程,直到调用其 join() 方法的线程 终止 - 正常或通过未处理的异常 - 或 直到发生可选超时。

    在您的情况下,您已经启动了两个线程。所以两个线程都在工作。但是一旦你通过 t1.join() 阻塞了主线程,两个正在运行的线程都将可见。

    【讨论】:

      【解决方案2】:

      这是因为您还“启动”了另一个线程。如果您在t2.start() 上发表评论,则该线程仅适用于t1

      t1.start()
      # t2.start()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多