69

私は現在Pythonとクラスを学んでいて、基本的な質問がありますが、それに対する答えは見つかりませんでした。このダミークラスがあるとしましょう

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()

しかし、クラスの外でそれらを使用する必要がありますか?スレッドを処理するために別のクラスを作成する必要がありますか?

それを行う正しい方法は何ですか?

4

3 に答える 3

109

クラスから呼び出す場合は、次のように簡単です。

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()
于 2013-03-12T15:39:04.610 に答える