目次

1. परिचय

Python मा समानान्तर प्रसंस्करणको महत्त्व

Python एक सरल र प्रयोग गर्न सजिलो प्रोग्रामिङ भाषा हो, जसलाई विभिन्न प्रयोजनहरूमा प्रयोग गरिन्छ। तर, जटिल डेटा प्रशोधन वा गणना आवश्यक परेमा, Python को कार्य गति कहिलेकाहीँ समस्या बन्न सक्छ। यसलाई समाधान गर्न, एकै समयमा धेरै कार्यहरू चलाउन सक्ने “समानान्तर प्रसंस्करण” महत्त्वपूर्ण भूमिका खेल्छ। यस लेखमा, Python मा समानान्तर प्रसंस्करण कसरी कार्यान्वयन गर्न, आधारभूत विधिबाट विशिष्ट प्रयोग केसहरू सम्म प्रस्तुत गरिनेछ।

2. Python मा समानान्तर प्रक्रिया गर्ने विधिहरू

समानान्तर प्रक्रियाका मुख्य विधिहरू

Python मा समानान्तर प्रक्रिया कार्यान्वयन गर्ने केही तरिकाहरू छन्। मुख्य तीनवटा तल दिइएका छन्।
  1. बहु-थ्रेड (threading मोड्युल) एकै साथ धेरै थ्रेडहरू प्रयोग गरेर कार्यहरू चलाइन्छ, तर Python को GIL(Global Interpreter Lock)को प्रभावले CPU‑गहन कार्यहरूमा प्रभाव सीमित रहन्छ।
  2. बहु-प्रोसेस (multiprocessing मोड्युल) प्रत्येक प्रोसेसले अलग मेमोरी स्पेस पाउँछ, जसले GIL को प्रभाव नपारी, वास्तविक समानान्तर प्रक्रिया सम्भव बनाउँछ। ठूलो डेटा प्रक्रिया र भारी गणनाका लागि उपयुक्त छ।
  3. असिन्क्रोनस प्रक्रिया (asyncio मोड्युल) असिन्क्रोनस प्रक्रिया I/O‑बाउन्ड कार्यहरू(नेटवर्क संचार वा फाइल अपरेसन आदि)मा प्रभावकारी हुन्छ। यसले प्रतीक्षा समय धेरै हुने कार्यहरूलाई कुशलतापूर्वक अघि बढाउन मद्दत गर्छ।
年収訴求

3. मल्टिप्रोसेस vs मल्टिथ्रेड

GIL(Global Interpreter Lock)の影響

Python मा GIL भनिने प्रणाली छ, जसले गर्दा एकै समयमा केवल एक थ्रेड मात्र चलाउन सकिन्छ। यो CPU‑बाउन्ड कार्यहरूमा, थ्रेडहरू बढाए पनि प्रदर्शन सुधार नहुनुको कारण बन्छ। त्यसैले, थ्रेड प्रयोग गरेर समानान्तर प्रक्रिया केवल प्रतीक्षा समय धेरै हुने I/O‑बाउन्ड कार्यहरूमा मात्र प्रभावकारी हुन्छ।

मल्टिथ्रेडको लाभ र सीमाहरू

थ्रेडहरू हलुका हुन्छन्, र I/O‑बाउन्ड कार्यहरू (फाइल अपरेसन वा नेटवर्क प्रोसेसिङ जस्ता) का लागि उपयुक्त छन्। तर, माथि उल्लेखित GIL को कारण, धेरै CPU कोरहरू पूर्ण रूपमा प्रयोग गर्न नसक्ने भएकाले, CPU‑बाउन्ड कार्यहरूका लागि उपयुक्त छैन।
import threading
import time

def worker(num):
print(f"Worker {num} starting")
time.sleep(2)
print(f"Worker {num} finished")

threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()

for t in threads:
t.join()
यो कोडले ५ थ्रेडहरूलाई एकै साथ चलाउँछ, प्रत्येक २ सेकेन्डको स्लीप पछि समाप्त हुन्छ। मल्टिथ्रेड प्रयोग गरेर, कार्यहरू समानान्तर रूपमा अघि बढ्ने देख्न सकिन्छ।

मल्टिप्रोसेसको लाभ

GIL को प्रतिबन्धलाई टार्नका लागि मल्टिप्रोसेस प्रभावकारी हुन्छ। प्रोसेसहरू थ्रेडभन्दा फरक छन्, स्वतन्त्र मेमोरी स्पेस भएकोले, धेरै CPU कोरहरू पूर्ण रूपमा प्रयोग गर्न सकिन्छ। विशेष गरी, भारी गणना कार्य वा ठूलो डेटा ह्यान्डल गर्ने अवस्थामा प्रभाव देखिन्छ।
from multiprocessing import Process
import time

def worker(num):
print(f"Worker {num}.sleep(2)
print(f"Worker {num} finished")

if name == 'main':
processes = []
for i in range(5):
p = Process(target=worker, args=(i,))
processes.append(p)
p.start()

for p in processes:
    p.join()
यस उदाहरणमा, ५ प्रोसेसहरू समानान्तर रूपमा चल्छन्, प्रत्येक स्वतन्त्र रूपमा कार्यहरू कार्यान्वयन गर्छ। join() मेथडले प्रत्येक प्रोसेस समाप्त नहुन्जेल पर्खन्छ, त्यसैले सबै प्रोसेस समाप्त नहुँदा कार्यक्रम अर्को चरणमा जान्दैन।

4. Python मा समानान्तर प्रक्रिया कार्यान्वयन गर्ने तरिका

multiprocessing मोड्युल द्वारा समानान्तर प्रक्रिया

multiprocessing मोड्युल प्रयोग गर्दा, धेरै प्रक्रियाहरूलाई प्रभावकारी रूपमा व्यवस्थापन गर्न सकिन्छ। तल प्रक्रिया पूल प्रयोग गरेर कार्यहरूलाई समानान्तर रूपमा प्रक्रिया गर्ने आधारभूत उदाहरण छ।
from multiprocessing import Pool

def square(x):
return x * x

if name == 'main':
with Pool(4) as p:
result = p.map(square, [1, 2, 3, 4, 5])
print(result)
यो कोडमा, ४ वटा प्रक्रिया एकै साथ चलाइन्छ, प्रत्येकले सूचीका तत्वहरूमा वर्ग गणना गर्दछ। परिणाम सूचीको रूपमा फिर्ता हुन्छ, र समानान्तर प्रक्रियाको कार्यक्षमता जाँच्न सकिन्छ।
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. असिंक्रोनस प्रक्रिया र यसको प्रयोगहरू

asyncio मोड्युल प्रयोग गरेर असिंक्रोनस प्रक्रिया

asyncio विशेष गरी I/O प्रतीक्षा समय उत्पन्न हुने कार्यहरूका लागि उपयुक्त छ। नेटवर्क संचार वा फाइल इनपुट/आउटपुट जस्ता प्रक्रियाहरूलाई, प्रतीक्षा समयमा अन्य कार्यहरूलाई समानान्तर रूपमा चलाएर प्रभावकारी रूपमा अघि बढाउन सकिन्छ।
import asyncio

async def worker(num):
print(f'Worker {num} starting')
await asyncio.sleep(1)
print(f'Worker {num} finished')

async def main():
tasks = [worker(i) for i in range(5)]
await asyncio.gather(*tasks)

asyncio.run(main())
यो कोडले ५ वटा कार्यहरूलाई समानान्तर रूपमा प्रक्रिया गर्छ।await प्रयोग गरेर असिंक्रोनस प्रक्रिया गरिन्छ, र प्रत्येक कार्यको प्रतीक्षा समयमा अन्य कार्यहरू चलाइन्छ।

6. समानान्तर प्रक्रियाको प्रदर्शन ट्युनिङ

Joblib प्रयोग गरेर समानान्तरिकरण

Joblib डेटा प्रशोधन र मेसिन लर्निङ मोडेलको प्रशिक्षण जस्ता भारी गणनाहरूलाई प्रभावकारी बनाउने लाइब्रेरी हो। तलको कोड Joblib प्रयोग गरेर समानान्तर प्रक्रिया गर्ने उदाहरण हो।
from joblib import Parallel, delayed

def heavy_task(n):
return n ** 2

results = Parallel(n_jobs=4)(delayed(heavy_task)(i) for i in range(10))
print(results)
n_jobs निर्दिष्ट गरेर, एकै समयमा चल्ने प्रक्रियाहरूको संख्या नियन्त्रण गर्न सकिन्छ। यस उदाहरणमा, 4 प्रक्रियाहरूले गणना समानान्तर रूपमा गरी, परिणामलाई सूचीको रूपमा फिर्ता गर्छ।

7. Python समानान्तर प्रक्रियाको व्यावहारिक अनुप्रयोगहरू

डेटा प्रशोधन र वेब स्क्र्यापिङ

Python मा समानान्तर प्रक्रिया डेटा प्रशोधन र वेब स्क्र्यापिङ जस्ता धेरै डेटा एकै साथ ह्यान्डल गर्ने परिस्थितिहरूमा विशेष गरी प्रभावकारी हुन्छ। उदाहरणका लागि, वेब पृष्ठहरूलाई क्रलिङ गर्दा, मल्टिथ्रेड वा असिन्क्रोनस प्रक्रिया प्रयोग गरेर एकै समयमा धेरै अनुरोधहरू पठाउन सकिन्छ, जसले प्रक्रिया समयलाई धेरै घटाउन सम्भव बनाउँछ। साथै, मेसिन लर्निङको प्रशिक्षण र डेटा पूर्वप्रशोधनमा पनि, multiprocessingJoblib को उपयोग गरेर प्रदर्शन सुधार गर्न सकिन्छ।

8. सारांश

समांतर प्रक्रिया Python को प्रदर्शनलाई अधिकतम निकाल्न आवश्यक प्रविधि हो।threading, multiprocessing, asyncio, र Joblib जस्ता मोड्युलहरूलाई उपयुक्त रूपमा प्रयोग गरेर, विभिन्न परिस्थितिहरूमा कार्यहरूलाई प्रभावकारी रूपमा प्रक्रिया गर्न सकिन्छ। वास्तविक परियोजनाहरूमा यी प्रविधिहरूलाई प्रयोग गरी, प्रक्रिया दक्षता सुधार्ने लक्ष्य राखौं।
侍エンジニア塾