2017-09-18 117 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:感谢您的初始评论。很高兴我能帮上忙。 –