"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PyQt अनुप्रयोगों में थ्रेड्स को प्रभावी ढंग से कैसे प्रबंधित करें?

PyQt अनुप्रयोगों में थ्रेड्स को प्रभावी ढंग से कैसे प्रबंधित करें?

2024-11-03 को प्रकाशित
ब्राउज़ करें:310

How to Effectively Manage Threads in PyQt Applications?

थ्रेड्स को प्रबंधित करने के लिए पायथन की PyQt लाइब्रेरी का उपयोग कैसे करें

PyQt पायथन अनुप्रयोगों में ग्राफिकल यूजर इंटरफेस के निर्माण के लिए एक मजबूत ढांचा प्रदान करता है। पृष्ठभूमि कार्यों को निष्पादित करते समय सुचारू और प्रतिक्रियाशील यूआई अपडेट सुनिश्चित करने के लिए, क्यूटी उन थ्रेड्स का उपयोग करता है जो मुख्य जीयूआई थ्रेड के साथ-साथ चलते हैं। हालाँकि, थ्रेड्स को प्रभावी ढंग से नियोजित करने के लिए सावधानीपूर्वक विचार करने की आवश्यकता होती है।

जैसा कि माया पॉश के लेख में बताया गया है, QThreads के साथ काम करते समय रन विधि का पुन: कार्यान्वयन पसंदीदा दृष्टिकोण नहीं होना चाहिए। इसके बजाय, थ्रेड्स के बीच संचार को सुविधाजनक बनाने के लिए सिग्नल और स्लॉट का उपयोग करने पर विचार करें। सही कार्यान्वयन को स्पष्ट करने के लिए, एक व्यावहारिक उदाहरण प्रस्तुत किया जाएगा। जबकि मुख्य GUI थ्रेड ग्राफ़िकल इंटरफ़ेस का प्रबंधन करता है। वर्कर थ्रेड सिग्नल के माध्यम से जीयूआई को स्थिति अपडेट संचारित करता है।

गणना शुरू करने के लिए, उपयोगकर्ता "प्रारंभ" बटन पर क्लिक करता है। "रद्द करें" बटन का उपयोग ऑपरेशन को समाप्त करने और वर्कर थ्रेड को रीसेट करने के लिए किया जा सकता है। कृपया ध्यान दें कि बलपूर्वक थ्रेड समाप्ति की आमतौर पर अनुशंसा नहीं की जाती है, लेकिन इसका उपयोग प्रदर्शन उद्देश्यों के लिए किया जाता है। आयात sys यादृच्छिक आयात करें वर्ग उदाहरण(QtCore.QObject): सिग्नलस्टैटस = QtCore.pyqtSignal(str) def __init__(स्वयं, माता-पिता=कोई नहीं): सुपर(स्वयं.__वर्ग__, स्वयं).__init__(अभिभावक) # एक gui ऑब्जेक्ट बनाएं. self.gui = विंडो() # एक नया वर्कर थ्रेड बनाएं. self.createWorkerThread() # कोई भी क्रॉस ऑब्जेक्ट कनेक्शन बनाएं. self._connectSignals() self.gui.शो() def _connectSignals(स्वयं): self.gui.button_cancel.clicked.connect(self.forceWorkerReset) self.signalStatus.connect(self.gui.updateStatus) self.parent().aboutToQuit.connect(self.forceWorkerQuit) def createWorkerThread(स्वयं): # वर्कर ऑब्जेक्ट और वर्कर_थ्रेड को सेटअप करें। self.worker = WorkerObject() self.worker_thread = QtCore.QThread() self.worker.moveToThread(स्वयं.worker_thread) self.worker_thread.start() # किसी भी कार्यकर्ता सिग्नल को कनेक्ट करें self.worker.signalStatus.connect(self.gui.updateStatus) self.gui.button_start.clicked.connect(self.worker.startWork) डीईएफ़ फ़ोर्सवर्कर रीसेट(स्वयं): यदि self.worker_thread.isRunning(): प्रिंट करें ('थ्रेड समाप्त हो रहा है।') स्वयं.कार्यकर्ता_थ्रेड.टर्मिनेट() प्रिंट करें ('थ्रेड समाप्ति की प्रतीक्षा है।') self.worker_thread.wait() self.signalStatus.emit('निष्क्रिय.') प्रिंट करें ('नई कार्यशील वस्तु का निर्माण।') self.createWorkerThread() डीईएफ़ फ़ोर्सवर्करक्विट(स्वयं): यदि self.worker_thread.isRunning(): स्वयं.कार्यकर्ता_थ्रेड.टर्मिनेट() self.worker_thread.wait() क्लास वर्करऑब्जेक्ट(QtCore.QObject): सिग्नलस्टैटस = QtCore.pyqtSignal(str) def __init__(स्वयं, माता-पिता=कोई नहीं): सुपर(स्वयं.__वर्ग__, स्वयं).__init__(अभिभावक) @QtCore.pyqtSlot() डीईएफ़ प्रारंभ कार्य(स्वयं): श्रेणी में द्वितीय के लिए (7): संख्या = यादृच्छिक.randint(0,5000**ii) self.signalStatus.emit('पुनरावृत्ति: {}, फैक्टरिंग: {}'.format(ii, संख्या)) कारक = स्व.प्रधान कारक(संख्या) प्रिंट ('संख्या:', संख्या, 'कारक:', कारक) self.signalStatus.emit('निष्क्रिय.') डीईएफ़ प्राइमफैक्टर्स (स्वयं, एन): मैं = 2 कारक = [] जबकि मैं * मैं 1: Factors.append(n) वापसी कारक क्लास विंडो(QtGui.QWidget): def __init__(स्वयं): QtGui.QWidget.__init__(स्वयं) self.button_start = QtGui.QPushButton('प्रारंभ', स्वयं) self.button_cancel = QtGui.QPushButton('रद्द करें', स्वयं) self.label_status = QtGui.QLabel('', स्वयं) लेआउट = QtGui.QVBoxLayout(स्वयं) लेआउट.एडविजेट(स्वयं.बटन_स्टार्ट) लेआउट.एडविजेट(स्वयं.बटन_रद्द करें) लेआउट.एडविजेट(स्वयं.लेबल_स्टेटस) self.setFixedSize(400, 200) @QtCore.pyqtSlot(str) def updateStatus(स्वयं, स्थिति): self.label_status.setText(स्थिति) यदि __नाम__=='__मुख्य__': ऐप = QtGui.QApplication(sys.argv) उदाहरण = उदाहरण (ऐप) sys.exit(app.exec_())यह उदाहरण PyQt एप्लिकेशन में QThreads के उचित उपयोग को दर्शाता है, जो उपयोगकर्ता इंटरफ़ेस को फ्रीज किए बिना कुशल पृष्ठभूमि संचालन की अनुमति देता है।

विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729302445 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3