پاسخ تمرین ۱
- ساخت instance از کلاس
Thread - ارث بری از کلاس
Threadو override کردن__init__وrunو ساخت instance از کلاس ارث بری شده
پاسخ تمرین ۲
| ویژگی | روش اول – ساخت instance | روش دوم – ارث بری |
| سادگی استفاده | بیشتر | کمتر |
| انعطاف پذیری | کمتر | بیشتر |
| تعداد خطوط کد | کمتر | بیشتر |
| خوانایی کد | خواناتر برای کارهای ساده | خواناتر برای کارهای پیچیده تر |
| مدیریت حالت (state) | سختتر برای حالات پیچیده | راحتتر |
| قابلیت استفاده مجدد | کمتر | بیشتر (در صورت درست بودن معماری) |
پاسخ تمرین ۳
روش اول – ساخت instance از کلاس Thread
import time
from threading import Thread
def say_hi(name):
time.sleep(1)
print('hi', name)
t1 = Thread(target=say_hi, args=('Ali', ))
t2 = Thread(target=say_hi, args=('Hamid', ))
t3 = Thread(target=say_hi, args=('Farzane', ))
t4 = Thread(target=say_hi, args=('Reza', ))
t1.start()
t2.start()
t3.start()
t4.start()روش دوم ارث بری از کلاس Thread و override کردن آن
import time
from threading import Thread
class MyThread(Thread):
def __init__(self, target, args):
super().__init__()
self.target = target
self.args = args
def run(self):
self.target(*self.args)
def say_hi(name):
time.sleep(1)
print('hi', name)
t1 = MyThread(target=say_hi, args=('Ali', ))
t2 = MyThread(target=say_hi, args=('Hamid', ))
t3 = MyThread(target=say_hi, args=('Farzane', ))
t4 = MyThread(target=say_hi, args=('Reza', ))
t1.start()
t2.start()
t3.start()
t4.start()تمرین ۴ – دانلودر
import requests
import os
from threading import Thread
class MyThread(Thread):
def __init__(self, target, args):
super().__init__()
self.target = target
self.args = args
def run(self):
self.target(*self.args)
# فهرست آدرسهای فایلها
file_urls = [f"https://dummyimage.com/{i}.png" for i in range(300, 400)]
# تابع برای دانلود هر فایل
def download_file(file_url, cookies, headers):
file_name = os.path.basename(file_url) # نام فایل از آخرین بخش آدرس استخراج میشود
file_path = os.path.join("downloads", file_name) # مسیر محلی برای ذخیره فایلها
print(f"Downloading {file_name}...")
# دانلود فایل با استفاده از کتابخانه requests
response = requests.get(file_url, cookies=cookies, headers=headers)
with open(file_path, 'wb') as f:
f.write(response.content)
print(f"{file_name} downloaded successfully.")
# ایجاد پوشه downloads اگر وجود نداشته باشد
if not os.path.exists("downloads"):
os.makedirs("downloads")
# شروع دانلود هر فایل به صورت متوالی
threads = []
for file_url in file_urls:
t = MyThread(target=download_file, args=(file_url, {}, {}))
threads.append(t)
for t in threads:
t.start()
print("All files downloaded successfully.")