【问题标题】:Threading won't call function (Python)线程不会调用函数(Python)
【发布时间】:2017-02-02 19:25:01
【问题描述】:

我有一个用 python 2.7 编写的脚本,它需要一个线程。但是,无论我做什么,线程都不会调用该函数。

它调用的函数:

def siren_loop():
    while running:
        print 'dit is een print'

我试图称呼它的方式:

running = True
t = threading.Thread(target=siren_loop)
t.start()

或:

running = True
thread.start_new_thread( siren_loop, () )

我什至尝试向 siren_loop 添加参数以查看是否可行,但没有任何改变。我只是无法让它打印 siren_loop 函数中的行。

我还尝试了许多其他奇怪的事情,显然没有奏效。我做错了什么?

编辑:由于人们说它有效,我尝试从另一个函数调用线程。所以它看起来像这样:

def start_sirene():
    running = True
    t = threading.Thread(target=siren_loop)
    t.start()

然后那部分是从以下位置调用的:

if zwaailichtbool == False:
        start_sirene()
        print 'zwaailicht aan'
        zwaailichtbool = True
        sleep(0.5)

也许这会导致问题? 最后一个中的打印语句有效,当我在线程语句之前或之后添加打印时它也有效。

【问题讨论】:

  • 我刚刚尝试了您的代码,使用您尝试调用它的第一种方式,它连续打印出您在siren_loop 中的声明。所以我不确定问题是什么。
  • 也使用 QPython 进行了验证。你的代码很好。
  • 我编辑了这个问题,把我剩下的一些代码放在那里。
  • 也许zwaailichtbool 不是假的?
  • 创建线程后程序的其余部分做什么?如果它立即存在,线程将没有机会运行。另外,你是如何运行这一切的?你确定你有一个控制台打印语句的输出应该去的地方吗?最后,您确定要使用 Python 2.7 运行它吗?因为当你使用 Python 3.x 运行它时,线程只会因为语法错误而崩溃。

标签: python multithreading python-2.7 python-multithreading


【解决方案1】:

所以,在尝试了几个小时和几个小时的各种事情之后,我找到了解决方案,但仍然不明白问题所在。

显然程序不喜欢许多步骤。我走了一步(启动警报器方法),但使用了完全相同的代码,突然它起作用了。不知道为什么这是问题所在。如果有人知道,请赐教xD

【讨论】:

    【解决方案2】:

    running 是代码中的局部变量。将global running添加到start_sirene()

    【讨论】:

    • 这是我的想法,但这不会给 OP 一个“未定义”错误吗?
    • 你可能在别处初始化了全局运行。
    • 那不是问题。运行在我的代码开头初始化,运行良好。
    • 除非您在 Python 中将 global x 添加到函数中,否则 x = something 将始终使其成为该函数的局部变量,即使您的代码中的其他位置还有另一个 x。试试看:-)
    【解决方案3】:

    对我来说它工作得很好,你也可以将运行指定为 thread_function 的关键字参数。

    import threading
    
    def siren_loop(running):
        while running:
            print 'dit is een print'
    
    t = threading.Thread(target=siren_loop, kwargs=dict(running=True))
    t.start()
    

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2010-10-05
      相关资源
      最近更新 更多