সময়.স্লিপ - ঘুমের সুতো বা প্রক্রিয়া?


উত্তর:


353

এটি থ্রেডকে ব্লক করে। আপনি যদি পাইথন উত্সের মডিউল / টাইমমডিউল.এলটিতে সন্ধান করেন তবে আপনি দেখতে পাবেন যে floatsleep()স্লিপ অপারেশনের মূল অংশটি একটি পাই_বিএসএলএলএলও_উথ্রেডস এবং পাই_ END_ALLOW_THREADS ব্লকে আবৃত রয়েছে, বর্তমানের সময় অন্যান্য থ্রেডগুলি কার্যকর হতে পারে allowing একজন ঘুমায়। আপনি এটি একটি সাধারণ অজগর প্রোগ্রামের মাধ্যমেও পরীক্ষা করতে পারেন:

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

3
কোনও "থ্রেড" কীভাবে ব্লক হয়ে গেছে তা চিত্রিত করে। এবং কেন কেবল 5 এবং 103 মুদ্রিত হবে না, যখন অন্য সমস্ত সংখ্যা মুদ্রিত হয়। কেউ যদি ব্যাখ্যা করতে পারে তবে আমার পক্ষে সত্যিই সহায়ক হবে।
আক্কি

@ ইয়াক্কি: দয়া করে কোনও পুরানো প্রশ্নের মন্তব্য ব্যবহার না করে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন। এছাড়াও, 5 মুদ্রিত হয় (এটি 101 এর ঠিক আগে)।
নিক বেস্টিন

8
এই উত্তরটির অর্থ জানতে একটি নতুন প্রশ্ন খুলুন? এটি আমার কাছে বেশ অদ্ভুত বলে মনে হচ্ছে। এবং আমার অর্থ 11 (5 নয়), দুঃখিত এখন আমার মন্তব্যটি সংশোধন করতে পারে না। এই উত্তরটি কোন পয়েন্টটি তৈরি করার চেষ্টা করছে তা বুঝতে আমার আসলে কিছুটা সহায়তা দরকার need
আক্কি

প্রথম উত্তর: রেঞ্জ ফাংশন এক্সরেঞ্জ (কে, মি) এম -1 সমেত সমাপ্ত সংখ্যাগুলিকে প্রদান করে, তাই এক্সপ্রেশন তালিকা (এক্সরেঞ্জ (100, 103)) [100, 101, 102] প্রদান করে। এর অর্থ হল দৈর্ঘ্য (তালিকা (এক্সরেঞ্জ (কে, এম))) == মি - কে।
জেফ ইউঙ্কার

3
আক্কি, আরও সুনির্দিষ্টভাবে টাইম.স্লিপ () থ্রেডকে ব্লক করে যা টাইম.স্লিপ () বলে, তবে এটি অন্য থ্রেড চালানোর জন্য পাইথন জিআইএল প্রকাশ করে (যাতে এটি প্রক্রিয়াটি ব্লক করে না)। নিকের উদাহরণ সত্যই থ্রেডটি ব্লক করে দেখায়নি, এটি আরও দেখিয়েছে যে জিআইএল মুক্তি পেয়েছে (এভাবে দেখায় যে প্রক্রিয়াটি অবরুদ্ধ নয়)) আমি মনে করি যদি সময়ের পরে তার মুদ্রণ বিবরণের মতো আরও জিনিস থাকে তবে ওয়েটার () থ্রেডে ঘুমান (5), এটি দেখায় যে মুদ্রণটি সময় হওয়ার পরে হয়নি। ঘুম (5) শেষ হওয়ার পরে (অর্থাত ব্লকিং)
gunit

52

আপনার অ্যাপ্লিকেশনটিতে কেবলমাত্র একক থ্রেড রয়েছে এমন ক্ষেত্রে বাদে এটি কেবল থ্রেডটি ঘুমাবে, এক্ষেত্রে এটি থ্রেডটি কার্যকর করবে এবং কার্যকরভাবে প্রক্রিয়াটিও কার্যকর করবে।

ঘুমের উপরে অজগর ডকুমেন্টেশন এটি নির্দিষ্ট করে না, তাই আমি অবশ্যই বিভ্রান্তি বুঝতে পারি!

http://docs.python.org/2/library/time.html




13

থ্রেডটি ব্লক হয়ে যাবে, তবে প্রক্রিয়াটি এখনও বেঁচে আছে।

একক থ্রেডযুক্ত অ্যাপ্লিকেশনটিতে, এর অর্থ আপনি যখন ঘুমাবেন তখন সমস্ত কিছুই অবরুদ্ধ। বহুবিশ্লেষিত অ্যাপ্লিকেশনটিতে কেবল আপনি স্পষ্টভাবে 'ঘুম' থ্রেডটি ব্লক করবে এবং অন্যান্য থ্রেডগুলি এখনও প্রক্রিয়াটির মধ্যে চলে।


3

আপনার প্রক্রিয়াটির একক থ্রেড না থাকলে কেবল থ্রেড।


2

প্রক্রিয়া নিজেই চালানো যায় না। সম্পাদনের ক্ষেত্রে, প্রক্রিয়াটি থ্রেডগুলির জন্য কেবল একটি ধারক। মানে আপনি প্রক্রিয়াটি একেবারেই থামাতে পারবেন না। এটি কেবল প্রক্রিয়াতে প্রযোজ্য নয়।


তাই না? উইন্ডোজ বা অন্য কোনও ক্ষেত্রে এটি সত্য হতে পারে তবে সর্বজনীনভাবে অবশ্যই তা নয়। ইউনিক্স traditionতিহ্যগতভাবে থ্রেড ছিল না, এবং তাই পাইথন প্রোগ্রাম একটি প্রক্রিয়া চালায় (একক থ্রেড সহ, কিছু বিমূর্ত অর্থে) যা sleepআদেশটি বিরতি দেবে।
ট্রিপলি

আপনাকে হতাশ করার জন্য দুঃখিত, তবে উইন্ডোজ এবং সমস্ত * নিক্স সিস্টেমে মূল চলমান ইউনিট একটি থ্রেড। আপনি থ্রেড ছাড়া প্রক্রিয়া চালাতে পারবেন না। আপনি যদি শেষ থ্রেড থেকে প্রস্থান করেন, প্রক্রিয়াটি সমাপ্ত হবে।
ডেনিস দ্য মেনেস

এটি প্রশ্নের উত্তর দেয় না। বিশেষত, এই প্রশ্নটি পাইথন সম্পর্কে। পাইথনের একটি গ্লোবাল ইন্টারপ্রেটার লক (জিআইএল) রয়েছে। জিআইএল ধরে রাখার সময় যদি কোনও থ্রেড ঘুমাতে যায়, এটি প্রক্রিয়াটির সমস্ত পাইথন থ্রেডকে ব্লক করে দেবে, কারণ তারা সকলেই একই লক ভাগ করে।
আমটন কর্ট

1

এটি কোনও থ্রেডকে ব্লক করে যদি এটি একই থ্রেডে কার্যকর হয় তবে এটি মূল কোড থেকে কার্যকর করা হয় না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.