2013-03-12 8 views
31

現在、PythonとClassesを学習していますが、基本的な質問がありますが、それに対する答えは見つかりませんでした。のは、私は同時にresolve_domainとgenerate_website_thumbnailを実行すると、スレッドが終了したら、私はIPとサムネイルを印刷するこのダミーのクラスにスレッドでクラスメソッドを実行する(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 

を持っているとしましょう。

EDIT:私は多分、私がスレッドを使用する必要があり、この

r = DomainOperations('google.com') 

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

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

のようなものを知っている。しかし、私はクラスの外でそれらを使用する必要がありますか?私はスレッドを扱う別のクラスを書くべきでしょうか?

正しい方法はとは何ですか?

答えて

52

あなたはクラスからそれらを呼び出すと、それは同じくらい簡単です:

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

-1:あなたは、クラス内でスレッドを実行することができますが、スレッドは「自己」の名前空間を継承しませんと述べました。だから基本的にはできません。重要な情報があります –

+0

@jasondancks申し訳ありませんが、間違っています。次の例を参照してください:http://pastebin.com/8JWzReCW。 'self.resolve_domain'と' self.generate_website_thumbnail'は 'self'が両方の呼び出しの最初の引数であるのでオブジェクト属性を使います。 –

+1

ハァッ。今日私のコードでこれを動作させることができませんでしたので、クラスからメソッドを取り除き、オブジェクトをパラメータとして渡す必要がありました。謝罪します。 –

関連する問題