2017-02-02 88 views
0

我有一個用python 2.7編寫的腳本來調用一個線程。但是,無論我做什麼,該線程都不會調用該函數。線程不會調用函數(Python)

函數調用:

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) 

也許這會導致什麼問題? 最後一個print語句有效,當我在線程語句之前或之後添加一個print時,它也起作用。

+0

我剛剛試過你的代碼,用你試圖調用它的第一種方式,並在'siren_loop'中不斷打印出你的聲明。所以我不確定問題是什麼。 – tmwilson26

+0

也使用QPython驗證。你的代碼很好。 – Carcigenicate

+0

我編輯了這個問題,將其餘的代碼放在那裏。 – Noralie

回答

1

因此,在嘗試了幾個小時我和幾小時的各種事情後,我找到了一個解決方案,但仍然不明白問題所在。

顯然,該程序並不像許多步驟。我走了一步(開始警報方法),但使用完全相同的代碼,並突然它的工作。 Stl不知道爲什麼這是問題。如果有人知道,請指教我xD

0

running是您的代碼中的局部變量。添加global runningstart_sirene()

+0

這是我的想法,但不會給OP一個「未定義的」錯誤嗎? – Carcigenicate

+0

您可能已初始化其他地方的全局運行。 – Udi

+0

那不是問題。運行在我的代碼開始時被初始化,並且運行良好。 – Noralie

0

它對我來說工作得非常好,你也可以指定running作爲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()