पायथन में * निक्स के लिए, time.sleep()
धागा या प्रक्रिया को अवरुद्ध करता है?
पायथन में * निक्स के लिए, time.sleep()
धागा या प्रक्रिया को अवरुद्ध करता है?
जवाबों:
यह धागे को ब्लॉक करता है। यदि आप Python स्रोत में मॉड्यूल / timemodule.c में देखते हैं, तो आप देखेंगे कि कॉल करने के लिए floatsleep()
, स्लीप ऑपरेशन का मूल भाग Py_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
यह केवल उस मामले को छोड़कर थ्रेड को सोएगा जहां आपके आवेदन में केवल एक ही धागा है, जिस स्थिति में यह थ्रेड सोएगा और प्रभावी रूप से प्रक्रिया भी।
नींद पर अजगर प्रलेखन हालांकि यह निर्दिष्ट नहीं करता है, इसलिए मैं निश्चित रूप से भ्रम को समझ सकता हूं!
धागा ब्लॉक हो जाएगा, लेकिन प्रक्रिया अभी भी जीवित है।
एकल थ्रेडेड एप्लिकेशन में, इसका मतलब है कि आपके सोते समय सब कुछ अवरुद्ध है। एक मल्टीथ्रेडेड एप्लिकेशन में, केवल वह धागा जिसे आप स्पष्ट रूप से 'स्लीप' करते हैं, ब्लॉक हो जाएगा और अन्य थ्रेड अभी भी प्रक्रिया के भीतर चलते हैं।
प्रक्रिया स्वयं द्वारा चलाने योग्य नहीं है। निष्पादन के संबंध में, थ्रेड्स के लिए प्रक्रिया सिर्फ एक कंटेनर है। मतलब आप इस प्रक्रिया को बिल्कुल भी रोक नहीं सकते। यह बस प्रक्रिया के लिए लागू नहीं है।
sleep
कमांड रोक देगा।
यदि यह मुख्य कोड से निष्पादित किया जाता है तो यह उसी थ्रेड में निष्पादित होने पर थ्रेड को ब्लॉक करता है