سؤال

في بايثون لـ *nix، يفعل time.sleep() منع الموضوع أو العملية؟

هل كانت مفيدة؟

المحلول

إنه يمنع الخيط.إذا نظرت إلى Modules/timemodule.c في مصدر Python، فسترى ذلك في الاستدعاء 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

نصائح أخرى

سوف ينام الخيط فقط إلا في حالة أن التطبيق الخاص بك يحتوي على خيط واحد فقط، وفي هذه الحالة سوف ينام الخيط وبفعالية العملية أيضًا.

ومع ذلك، لا تحدد وثائق بايثون الخاصة بالنوم هذا الأمر، لذلك يمكنني بالتأكيد فهم الارتباك!

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

فقط الخيط.

سيتم حظر الخيط، ولكن العملية لا تزال على قيد الحياة.

في تطبيق واحد، هذا يعني أن كل شيء محظور أثناء النوم.في تطبيق متعدد مؤشرات الترابط، سيتم حظر مؤشر الترابط الذي "تنامه" بشكل صريح فقط وستظل سلاسل الرسائل الأخرى تعمل ضمن العملية.

الخيط فقط ما لم تحتوي عمليتك على خيط واحد.

العملية غير قابلة للتشغيل من تلقاء نفسها.فيما يتعلق بالتنفيذ، فإن العملية مجرد حاوية للخيوط.وهذا يعني أنه لا يمكنك إيقاف العملية مؤقتًا على الإطلاق.إنه ببساطة لا ينطبق على العملية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top