您好我遇到了Python Threads的问题。
我的目标是创建一个函数,在调用时将其他函数作为线程启动。不幸的是我遇到了两个问题(除了我缺乏Python知识。)
1:如果我把引号括起来:"globals()[T_Name[i]]()"
它将它视为一个字符串并正常执行代码。
2:如果我省略globals()[T_Name[i]]()
周围的引号,它会立即启动第一个函数,而不会处理脚本的其余部分以将其作为线程启动。
如果有人能提供一些见解我为格式化道歉,我最终会将其提升到PEP 8标准。
代码:
import threading
import time
T_Name=("Write_Done", "Write_Pin")
T_Time=[]
Tr=[]
for i, Nu in enumerate(T_Name):
Tr.append("T" + str(i))
T_Time.append("0")
def Write_Done():
while True:
print("Done")
time.sleep(5)
def Write_Pin():
while True:
print("Pin")
time.sleep(15)
def Thread_Checker():
while True:
time.sleep(5)
for i, TH in enumerate(T_Time):
if (time.time() - int(TH)) < 30:
pass
#thread is still rocking
else:
#thread has failed Time to get her done.
Tr[i] = threading.Thread(target=("globals()[T_Name[i]]()"))
print("starting" + T_Name[i])
Tr[i].daemon = True
Tr[i].start()
print("Test if alive")
if Tr[0].is_alive():
print("I LIVE!")
else:
print("I ded")
Thread_Checker()
答案 0 :(得分:0)
使用lambda函数创建一些实际上可以作为目标调用的东西,但是在调用目标之前推迟调用你想要的东西。
Tr[i] = threading.Thread(target=lambda: globals()[T_Name[i]]())