Python线程与创建计时器功能的过程

时间:2017-09-18 18:28:05

标签: python python-multithreading

我想在后台运行一个定义,并将一个参数传递给它(它应该运行多长时间),但以下代码不起作用:

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!")

如果我使用进程,我将第一块代码替换为:

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

然而,两者都回归:

TypeError: 'int' object is not iterable

我的问题是,我应该使用哪个模块,以及设置它的正确方法是什么?

1 个答案:

答案 0 :(得分: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

顺便说一句:如图所示,最好在线程外部解析用户输入。