برنامه نویسی چند نخی (Multi-Thread) در Python

بی مقدمه بریم سراغ اصل مطلب، همه امون تجربه اجرا کردن چندین برنامه به صورت همزمان را داشتیم پس اگر همین کار را با یکی از زبان برنامه نویسی انجام بدیم به اصطلاح از تکنیک مولتی ترد استفاده کردیم، یعنی هر نخ وظیفه ای مشخصی داره به جای اینکه از یک نخ استفاده کنیم تا به خواسته خودمون برسیم (ممکنه خیلی زمان بر باشه) بیایم از چند نخ استفاده کنیم تا سریع تر به پایان قصه برسیم، پس برنامه نویسی چند نخی میتونه سرعت عملیات را ما زیاد میکنن (البته نه همیشه) اگر دوست دارید بیشتر بخوندید راجبش پس اینجا را کلیک کنید.
اجازه بدید کمی عملیاتی تر قصه رو بررسی کنیم:
اول از همه دنیا را به صورت سینگل ترد ببینیم، پس به زبان پایتون کد ساده ای مینویسم که با کتابخانه ریکوست یک فایل به شکل json دانلود کنه و ذخیره کنه مثل همچین صفحه ای (مشخصات فیلم Tenet) که یک API KEY لازم داره که من از این لینک ساختم با یک سایتی که به من اجازه میده یک ایمیل موقت برای خودم بسازم.
خوب من این API KEY که ساختم تا ۱۰۰۰ تا ریکوست رایگانه اگر یک وقت لینک بالا از کار افتاد به همین علت بوده که شما خودتون به سادگی میتونید API KEY خودتونو بسازید.
12345678910# api_key = 4719d347 import requests import uuid url_list = ['http://www.omdbapi.com/?i=tt6723592&apikey=4719d347', 'http://www.omdbapi.com/?i=tt2382320&apikey=4719d347'] for url in url_list: html = requests.get(url, stream=True) file_name = uuid.uuid1() open(f'{file_name}.json', 'wb').write(html.content)
فرض کنید تعداد فیلم های که میخواهید اطلاعات اشونو داشته باشید از ۱ میلیون بیشتره اونوقت چی کار میکنید؟ حالا نوبت استفاده از قدرت مولتی ترد پایتونه که من با قطعه کدی که در ادامه براتون نوشتم در مدت زمان ۲۲ دقیقه ۴۹،۹۸۰ فایل به صورت json ذخیره کردم که حجم داده ها ۱ گیگابایت بود.
12345678910111213141516171819202122232425import requests import uuid from concurrent.futures import ThreadPoolExecutor, as_completed url_list = ['url1', 'url2'] def download_file(url, file_name): try: html = requests.get(url, stream=True) open(f'{file_name}.json', 'wb').write(html.content) return html.status_code except requests.exceptions.RequestException as e: return e def runner(): threads= [] with ThreadPoolExecutor(max_workers=20) as executor: for url in url_list: file_name = uuid.uuid1() threads.append(executor.submit(download_file, url, file_name)) for task in as_completed(threads): print(task.result()) runner()
مطلبی دیگر از این انتشارات
آموزش استخراج API از اپلیکیشن ها
مطلبی دیگر از این انتشارات
دستورات psql ای
مطلبی دیگر از این انتشارات
استارت مایکروسافت برای نرم افزار های موبایلی