مشخصات مقاله
-
609
-
0.0
-
3250
-
0
-
0
آموزش multi-threading در پایتون
آموزش چند رشته ای (multi-threading) در برنامه نویسی Python
رشته کردن (Threading) روشی است برای جدا کردن وظایفی که از لحاظ ترتیبی به هم وابسته نیستند. از رشته ها می توان برای بهبود پاسخگویی برنامه هایی استفاده کرد که در حالی که سایر وظایف در پس زمینه(background) در حال اجرا هستند، ورودی کاربران را دریافت می کند. یکی از کاربرد های مرتبط، اجرای وظایف ورودی و خروجی به موازات اجرای محاسبات در یک رشته دیگر است.
کد زیر نشان میدهد ماژول سطح بالای threading چگونه می تواند وظایف را در پس زمینه اجرا کند، در حالی که برنامه اصلی به اجرا ادامه می دهد.
import threading, zipfile
class AsyncZip(threading.Thread):
def __init__(self, infile, outfile):
threading.Thread.__init__(self)
self.infile = infile
self.outfile = outfile
def run(self):
f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
f.write(self.infile)
f.close()
print('Finished background zip of:', self.infile)
background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
print('The main program continues to run in foreground.')
background.join() # Wait for the background task to finish
print('Main program waited until background was done.')
چالش اصلی در برنامه های کاربردی چند رشته ای، هماهنگی رشته هایی است که داده یا سایر منابع را به اشتراک می گذارند. با این هدف، ماژول threading تعدادی امکانات همگام سازی از جمله قفل ها(locks)، رویداد ها(events)، متغیر های شرطی و سمافور ها(semaphores) را ارائه می کند.
با وجود قدرتمند بودن آن ابزار ها، خطاهای کوچک طراحی، می تواند منجر به بروز مشکلاتی شود که تولید دوباره آن را با مشکل مواجه کند. بنابراین، راهکار مورد نظر برای همگام سازی وظایف این است که روی تمامی دسترسی های یک رشته خاص به یک منبع، تمرکز کنیم و سپس با استفاده از ماژول queue ، آن رشته خاص را با درخواست ها از سایر رشته ها تغذیه کنیم. برنامه های کاربردی که از اشیای Queue برای ارتباطات بین رشته ای (inter-thread) و همگام سازی استفاده می کنند، برای طراحی ساده تر، خوانا تر و قابل اطمینان تر هستند.