पायथन में * निक्स के लिए, time.sleep()
धागे या प्रक्रिया को अवरुद्ध करता है?time.sleep - धागा या प्रक्रिया सोता है?
उत्तर
यह धागा को अवरुद्ध करता है। यदि आप पाइथन स्रोत में मॉड्यूल/timemodule.c में देखते हैं, तो आप देखेंगे कि floatsleep()
पर कॉल में, नींद ऑपरेशन का वास्तविक हिस्सा एक pie_BEGIN_ALLOW_THREADS और Py_END_ALLOW_THREADS ब्लॉक में लपेटा गया है, जिससे अन्य थ्रेड निष्पादित होने की अनुमति देते हैं। वर्तमान एक सोता है। तुम भी एक साधारण अजगर कार्यक्रम के साथ इस परीक्षण कर सकते हैं:
import time
from threading import Thread
class worker(Thread):
def run(self):
for x in xrange(0,11):
print x
time.sleep(1)
class waiter(Thread):
def run(self):
for x in xrange(100,103):
print x
time.sleep(5)
def run():
worker().start()
waiter().start()
कौन सा प्रिंट होगा:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
बस धागा।
यह उस मामले को छोड़कर केवल थ्रेड सो जाएगा जहां आपके एप्लिकेशन में केवल एक ही धागा है, इस मामले में यह थ्रेड और प्रभावी रूप से प्रक्रिया को भी सोएगा।
नींद पर अजगर दस्तावेज यह निर्दिष्ट नहीं करता है, इसलिए मैं निश्चित रूप से भ्रम को समझ सकता हूं!
@MichaelMrozek: ['नींद (3) 'कहता है: *" नींद() कॉलिंग थ्रेड को सेकंड सेकेंड तक समाप्त होने तक नींद आती है या सिग्नल आता है जिसे अनदेखा नहीं किया जाता है। "*] (Http: // man7। संगठन/लिनक्स/मैन-पेज/मैन 3/नींद 3.html) और [पाइथन दस्तावेज बग है] (http://bugs.python.org/issue23251)। – jfs
धागा को अवरुद्ध कर देगा, लेकिन यह प्रक्रिया अभी भी जीवित है।
एक थ्रेडेड एप्लिकेशन में, इसका मतलब है कि आप सोते समय सब कुछ अवरुद्ध है। एक बहुप्रचारित अनुप्रयोग में, केवल थ्रेड जिसे आप स्पष्ट रूप से 'नींद' ब्लॉक करेंगे और अन्य थ्रेड अभी भी प्रक्रिया के भीतर चलेंगे।
केवल धागा जब तक आपके प्रक्रिया किसी एकल थ्रेड है।
प्रक्रिया स्वयं ही चलाने योग्य नहीं है। निष्पादन के संबंध में, प्रक्रिया धागे के लिए सिर्फ एक कंटेनर है। मतलब आप प्रक्रिया को रोक नहीं सकते हैं। यह प्रक्रिया पर लागू नहीं है।
है ना? यह विंडोज या कुछ पर सच हो सकता है, लेकिन निश्चित रूप से सार्वभौमिक नहीं है।यूनिक्स परंपरागत रूप से धागे नहीं थे, और इसलिए एक पायथन प्रोग्राम एक प्रक्रिया चलाता है (एक धागे के साथ, कुछ अमूर्त अर्थ में) जो 'नींद' आदेश रोक देगा। – tripleee
आपको निराश करने के लिए दुख, लेकिन विंडोज़ और सभी * निक्स सिस्टम पर मुख्य चलने वाली इकाई एक धागा है। आप धागे के बिना प्रक्रिया नहीं चला सकते हैं। यदि आप अंतिम धागे से बाहर निकलते हैं, तो प्रक्रिया समाप्त हो जाती है। –
एक "थ्रेड" को कैसे दिखाया गया है अवरुद्ध किया गया है। और क्यों न केवल 5 और 103 मुद्रित होते हैं, जबकि अन्य सभी नंबर मुद्रित होते हैं। अगर कोई समझा सकता है तो मेरे लिए वास्तव में सहायक होगा। – akki
@akki: कृपया पुराने प्रश्न की टिप्पणियों का उपयोग करने के बजाय एक नया प्रश्न पूछें। इसके अलावा, 5 मुद्रित हो जाता है (यह 101 से ठीक पहले है)। –
इस उत्तर के अर्थ से पूछने के लिए एक नया प्रश्न खोलें? यह मेरे लिए काफी अजीब लगता है। और मेरा मतलब 11 (5 नहीं), क्षमा करें अब मेरी टिप्पणी को सही नहीं कर सकता। मुझे वास्तव में कुछ मदद की ज़रूरत है कि यह उत्तर किस बिंदु को बनाने का प्रयास कर रहा है। – akki