我想在后台运行一个定义,并将一个参数传递给它(它应该运行多长时间),但以下代码不起作用:
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
我的问题是,我应该使用哪个模块,以及设置它的正确方法是什么?
答案 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。
顺便说一句:如图所示,最好在线程外部解析用户输入。