J'apprends actuellement Python et Classes et j'ai une question de base, mais je n'ai trouvé aucune réponse. Disons que j'ai cette classe factice
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
Je souhaite exécuter simultanément.
EDIT: Je sais que je devrais utiliser des threads, peut-être quelque chose comme ça
r = DomainOperations('google.com')
t1 = threading.Thread(target=r.resolve_domain)
t1.start()
t2 = threading.Thread(target=r.generate_website_thumbnail)
t2.start()
Mais dois-je les utiliser en dehors de la classe? Dois-je écrire une autre classe pour gérer les threads?
Quelle est la bonne façon pour faire cela?
Si vous les appelez depuis la classe, c'est aussi simple que:
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 __== '__main__':
d = DomainOperations()
d.run()
Vous pouvez hériter de la classe Thread dans DomainOperation, de cette façon, le code serait plus propre et facilement compréhensible. vous devez remplacer une méthode 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)
Et vous commencerez vos discussions de cette façon.
if __== '__main__':
thread1 = DomainOperations()
thread1.start()