Python içinde * nix için, time.sleep()
, iş parçacığını veya işlemi engeller mi?
İ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
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!
Sadece iplik.
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.
İşleminizde tek bir iş parçacığı yoksa, yalnızca iş parçacığı.
İş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.