2017-09-18 88 views
0

我想在後臺運行一個定義並將參數傳遞給它(應該運行多長時間),但以下代碼不起作用:Python線程與創建定時器函數的過程

p = Process(target= run_timer, args=timer_time_value) 
p.start() 
p.join() 

但是,這兩個回報:

thread = threading.Thread(target= run_timer, args=timer_time_value) # Where timer_time_value is taken from user input, and converted into an integer. 
thread.daemon = True 
thread.start() 

def run_timer(time_to_sleep_For): 
    time_to_sleep_For = int(time_to_sleep_For) 
    time.sleep(time_to_sleep_For) 
    Speak("Timer done!") 

如果我使用過程中,我與替換代碼的第一塊

TypeError: 'int' object is not iterable 

我的問題是,我應該使用哪個模塊,以及設置它的正確方法是什麼?

+3

'args'需要一個迭代。作爲'args =(timer_time_value,)'傳遞,即元組中有1個元素 – roganjosh

回答

2

@roganjosh指出你需要傳遞一個列表或元組(請參閱Thread)。這是工作示例:

import threading  
import time 

def run_timer(time_to_sleep_for): 
    time.sleep(time_to_sleep_for) 
    print("Timer done!") 


user_time = "3" 

try: 
    user_time = int(user_time) 
except ValueError: 
    user_time = 0 # default sleep 

thread = threading.Thread(target=run_timer, 
          args=(user_time,)) 
thread.daemon = True 
thread.start() 
thread.join() 

對於進程和線程之間的差異看到this answers

順便說一句:如示例中所示,最好是解析線程外部的用戶輸入。

+1

@roganjosh:感謝您的初始評論。很高興我能幫上忙。 –