动态线程

时间:2016-10-21 01:39:46

标签: python multithreading

您好我遇到了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()

1 个答案:

答案 0 :(得分:0)

使用lambda函数创建一些实际上可以作为目标调用的东西,但是在调用目标之前推迟调用你想要的东西。

Tr[i] = threading.Thread(target=lambda: globals()[T_Name[i]]())