如何在python的线程内运行无限循环

时间:2019-09-13 15:36:11

标签: python multithreading python-multithreading

我到处都看过了,好像我写的线程应该正常工作。我已经检查了许多其他有关它的线程和教程。我似乎无法在线程中运行无限循环。尽管我做了什么,但只有第一个线程可以工作/打印。

这是方法的代码。

import threading


def thread1():
      while True:
            print("abc")
def thread2():
      while True:
            print ("123")

if __name__ == "__main__":
    t1 = threading.Thread(target=thread1())
    t2 = threading.Thread(target=thread2())

    t1.start
    t2.start

    t1.join
    t2.join

在用target=调用函数的最后删除假名不会打印任何内容,因此我将其保留在其中。

这是类/对象的版本。

from threading import Thread
class Thread1(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.start

    def run():
        while True:
            print ("abc")

class Thread2(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.start

    def run():
        while True:
            print ("123")

Thread1.run()
Thread2.run()

两者都从未尝试打印123,我也不知道为什么。看起来无限循环不应该成为问题,因为它们是并行运行的。我尝试了time.sleep(可能是GIL停止了它的idk),所以线程2可以在线程1空闲时运行。没用

2 个答案:

答案 0 :(得分:0)

第一个示例:

if __name__ == "__main__":
    t1 = threading.Thread(target=thread1)
    t2 = threading.Thread(target=thread2)

    t1.start()
    t2.start()

    t1.join()
    t2.join()

将函数而不是调用函数的结果作为threading.Thread传递给target

对于本节示例。请勿致电run。致电start。创建实例后。

from threading import Thread
class Thread1(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True

    def run():
        while True:
            print ("abc")

class Thread2(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True

    def run():
        while True:
            print ("123")

Thread1().start()
Thread2().start()

答案 1 :(得分:0)

您的括号在第一个版本中的位置错误。

按照目前的编写,您正在创建thread1时传递调用t1的结果;由于该调用永远不会返回,因此您实际上不会创建线程。因此,您需要删除那些括号。

但是您不要在尝试调用startjoin方法的地方加上括号,因此即使您没有调用这些线程也从未真正启动过创建线程时,请不要使用多余的括号。