it-swarm-tr.com

time.sleep - ipliği ya da işlemi uyur mu?

Python içinde * nix için, time.sleep(), iş parçacığını veya işlemi engeller mi?

338
Jeremy Dunck

İpliği engeller. Modüller/timemodule.c'ye Python kaynağında bakarsanız, floatsleep() çağrısında, uyku işleminin önemli kısmının bir Py_BEGIN_ALLOW_THREADS ve Py_END_ALLOW_THREADS bloğuna sarıldığını görürsünüz. mevcut olan uyurken diğer dişlilerin çalışmaya devam etmesine izin verir. Bunu basit bir python programıyla da test edebilirsiniz:

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()

Hangi yazdıracak:

>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
315
Nick Bastin

Uygulamanızın sadece tek bir dişe sahip olduğu durumlar haricinde, sadece ipliği uyuyacaktır, bu durumda ipliği uyuyacak ve aynı zamanda etkili bir şekilde işlemi gerçekleştirecektir.

Ancak uykudaki python belgeleri bunu belirtmiyor, bu yüzden kesinlikle kargaşayı anlayabiliyorum!

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

49
Zach Burlingame

Sadece iplik.

28
finnw

Iş parçacığı engeller, ancak işlem hala hayatta.

Tek bir dişli uygulamada bu, uyurken her şeyin engellendiği anlamına gelir. Çok iş parçacıklı bir uygulamada, yalnızca açıkça 'uyuduğunuz' iş parçacığı engeller ve diğer iş parçacığı hala işlem içinde çalışır.

10
Corey Goldberg

İşleminizde tek bir iş parçacığı yoksa, yalnızca iş parçacığı.

2
Ali Abbasinasab

İşlem tek başına çalıştırılamaz. Uygulama ile ilgili olarak, işlem sadece dişler için bir kaptır. Yani süreci hiç duraklatamazsınız. İşlem için geçerli değildir.

1
Denis The Menace