نخبندی تکنیکی برای جداسازی وظایفی است که به طور توالی وابسته نیستند. نخها میتوانند برای بهبود پاسخگویی برنامههایی که ورودی کاربر را میپذیرند در حالی که وظایف دیگر در پسزمینه اجرا میشوند استفاده شوند. یک کاربرد مرتبط، اجرای موازی ورودی/خروجی با محاسبات در یک نخ دیگر است.
کد زیر نشان میدهد چگونه ماژول سطح بالای threading میتواند وظایف را در پسزمینه اجرا کند در حالی که برنامه اصلی به اجرا ادامه میدهد:
import threading, zipfile
class AsyncZip(threading.Thread):
def __init__(self, infile, outfile):
super().__init__()
self.infile = infile
self.outfile = outfile
def run(self):
with zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED) as f:
f.write(self.infile)
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 ابزارهای هماهنگی متعددی شامل قفلها، رویدادها، متغیرهای شرطی و سمافورها فراهم میکند.
در حالی که این ابزارها قدرتمند هستند، خطاهای جزئی در طراحی میتوانند مشکلاتی ایجاد کنند که بازتولید آنها دشوار است. بنابراین، رویکرد ترجیحی برای هماهنگی وظایف، متمرکز کردن تمام دسترسی به یک منبع در یک نخ واحد و سپس استفاده از ماژول queue برای تغذیه آن نخ با درخواستهایی از نخهای دیگر است. برنامههایی که از اشیاء Queue برای ارتباط و هماهنگی بین نخها استفاده میکنند طراحی آسانتر، خواناتر و قابل اعتمادتری دارند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial