메신저마다 새로운 값으로 연속적으로 실행되는 스레드를 업데이트하려고합니다.파이썬 스레딩과 값의 넘겨주기
class Test:
def __init__(self, num):
#testing reasons
self.num = num
def printloop(self, num):
self.num = num
#running is set to True sometime in the beginning
while running:
print(self.num)
time.sleep(3)
if not running:
print("finished")
def setnum(self, num):
self.num = num
내가 이렇게 스레드를 만들 :이 작동하고 적절한 인수를 인쇄
t1 = threading.Thread(target=test.printloop,args=("1"))
.
하지만 단일 값 스레드를 새 값으로 업데이트하려면 어떻게해야합니까? 모든 스레드를 업데이트해야하는 것은 아닙니다. 모든 스레드에 대한 값을 업데이트 할 것이므로 클래스의 setnum 메소드가 제대로 작동하지 않습니다.
스레드 수명을 제한하고 조인을 완료해야합니다. 그런 다음 새 값으로 다시 작성 하시겠습니까? 또는 각 스레드에 대한 변수를 정의해야합니까? 어떻게 동적으로 수행합니까? 더 좋은 방법이 보이지 않습니까? 감사합니다.
편집 :
test1 = Test(1)
..
test5 = Test(5)
t1 = threading.Thread(target=test1.printloop,args=("1"))
t5 = threading.Thread(target=test5.printloop,args=("5"))
다음 값을 설정하려면 각각의 메소드를 사용 : 나는 내가 좋아하는 것을하게 될 겁니다 가정
?
? 백그라운드에서 끊임없이 계속되는 것? 또는 끝낼 수있는 일이 있습니까? – thkang
계속해서 백그라운드에서 실행하고 싶습니다. 그러나 타이머를 설정하여 새 값으로 다시 실행할 수 있습니다. 내 선호하는 방법은 실행 가능한 경우 실행중인 스레드를 중지하거나 다시 만들지 않고 업데이트하는 것입니다. – Jrc
test1.setnum ('새 값')은 test1.num 만 수정합니다. 당신이 args를 초기화하는 방법에 조심하십시오. args는 튜플이므로 args = ('1',)이어야합니다. printloop은 3 개의 인자 '1', '2', '3'로 호출되기 때문에 args = ('123')은 에러를 던질 것입니다. – sebdelsol