تمرین ۱
روشهای ایجاد thread با استفاده از کلاس threading.Thread را نام ببرید.
تمرین ۲
روشهای ایجاد thread با استفاده از کلاس threading.Thread را با یکدیگر مقایسه کنید.
تمرین ۳
برنامه زیر در پارادایم sequential programming نوشته شده است. با استفاده از کلاس threading.Thread به دو روشی که در این بخش یاد گرفتید، این برنامه را بازنویسی کنید تا در پارادایم concurrent programming قرار بگیرد.
import time
def say_hi(name):
time.sleep(1)
print('hi', name)
say_hi('Ali')
say_hi('Hamid')
say_hi('Farzane')
say_hi('Reza')تمرین ۴ – دانلودر
تکه کد زیر برنامهای است که لیستی از آدرس فایلها را میگیرد و دانلود میکند. این برنامه را بازنویسی کرده و سرعت دانلود فایلها را با استفاده از threading.Thread افزایش دهید. این تمرین را به هر دو روشی که در این بخش یاد گرفتید بهینه کنید.
import requests
import os
# فهرست آدرسهای فایلها
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")
# شروع دانلود هر فایل به صورت متوالی
for file_url in file_urls:
download_file(file_url, {}, {})
print("All files downloaded successfully.")