Динамическая резьба

99
4

Привет, у меня проблема с потоками Python.

То, что я собираюсь сделать, это создать функцию, которая запускает другие функции как поток при вызове. К сожалению, я сталкиваюсь с двумя проблемами (кроме того, что я не знаю в 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()

спросил(а) 2021-01-19T12:32:21+03:00 6 месяцев, 1 неделя назад
1
Решение
78

Используйте лямбда-функцию для создания чего-то, что на самом деле можно назвать целевым, но отклоняет вызов того, что вы хотите, пока не будет вызвана цель.

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

ответил(а) 2021-01-19T12:32:21+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема