복붙노트

[PYTHON] 스레드에서 클래스 메소드 실행 (파이썬)

PYTHON

스레드에서 클래스 메소드 실행 (파이썬)

나는 현재 Python과 Classes를 배우고 있으며 기본적인 질문이 있지만 그것에 대한 답을 찾지 못했습니다. 이 더미 클래스가 있다고 가정 해 봅시다.

class DomainOperations:
    def __init__(self, domain):
        self.domain = domain
        self.domain_ip = ''
        self.website_thumbnail = ''

    def resolve_domain(self):
        #resolve domain to ipv4 and save to self.domain_ip

    def generate_website_thumbnail(self):
        #generate website thumbnail and save the url to self.website_thumbnail

동시에 resolve_domain과 generate_website_thumbnail을 실행하고 스레드가 완료되면 IP와 축소판을 인쇄하려고합니다.

편집 : 스레드를 사용해야합니다, 어쩌면이 같은

r = DomainOperations('google.com')

t1 = threading.Thread(target=r.resolve_domain)
t1.start()

t2 = threading.Thread(target=r.generate_website_thumbnail)
t2.start()

하지만 클래스 외부에서 사용해야합니까? 스레드를 처리 할 다른 클래스를 작성해야합니까?

그렇게하는 올바른 방법은 무엇입니까?

해결법

  1. ==============================

    1.수업에서 전화하면 다음과 같이 간단합니다.

    수업에서 전화하면 다음과 같이 간단합니다.

    import threading
    
    class DomainOperations:
    
        def __init__(self):
            self.domain_ip = ''
            self.website_thumbnail = ''
    
        def resolve_domain(self):
            self.domain_ip = 'foo'
    
        def generate_website_thumbnail(self):
            self.website_thumbnail= 'bar'
    
        def run(self):
            t1 = threading.Thread(target=self.resolve_domain)
            t2 = threading.Thread(target=self.generate_website_thumbnail)
            t1.start()
            t2.start()
            t1.join()
            t2.join()
            print(self.domain_ip, self.website_thumbnail)
    
    if __name__ == '__main__':
        d = DomainOperations()
        d.run()
    
  2. ==============================

    2.DomainOperation에서 Thread 클래스를 상속 할 수 있습니다. 이렇게하면 코드가 더 깨끗하고 쉽게 이해할 수 있습니다. run () 메서드를 재정의해야합니다.

    DomainOperation에서 Thread 클래스를 상속 할 수 있습니다. 이렇게하면 코드가 더 깨끗하고 쉽게 이해할 수 있습니다. run () 메서드를 재정의해야합니다.

    from threading import threading.Thread
    
    class DomainOperations(Thread):
        def __init__(self):
           self.domain_ip = ''
           self.website_thumbnail = ''
    
       def resolve_domain(self):
           self.domain_ip = 'foo'
    
       def generate_website_thumbnail(self):
           self.website_thumbnail= 'bar'
    
       def run(self):
           #domain will be resolved on first thread
           self.resolve_domain()
           #thumbnail will be resolved on second OR newly created below thread
           thread2 = Thread(target=self.generate_website_thumbnail)
           thread.start()
           # thread1 will wait for thread2
           self.join()
           # thread2 will wait for thread1, if it's late.
           thread2.join()
           # here it will print ip and thumbnail before exiting first thread
           print(self.domain_ip, self.website_thumbnail)
    

    그리고 당신은 이런 방식으로 스레드를 시작할 것입니다.

    if __name__ == '__main__':
       thread1 = DomainOperations()
       thread1.start()
    
  3. from https://stackoverflow.com/questions/15365406/run-class-methods-in-threads-python by cc-by-sa and MIT license