繁体   English   中英

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

[英]How to run infinite loops within threading in python

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

这是方法的代码。

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空闲时运行。 没用

对于第一个示例:

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()

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

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

但是您没有在试图调用startjoin方法的地方加上括号,因此即使您在创建线程时没有使用多余的括号,也不会真正启动线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM