Python for * nix'de time.sleep()
iş parçacığını veya işlemi engeller mi?
Python for * nix'de time.sleep()
iş parçacığını veya işlemi engeller mi?
Yanıtlar:
İpliği engeller. Python kaynağındaki Modules / timemodule.c dosyasına bakarsanız, çağrıldığında floatsleep()
, uyku işleminin önemli bölümünün bir Py_BEGIN_ALLOW_THREADS ve Py_END_ALLOW_THREADS bloğuna sarıldığını görürsünüz. biri uyur. Bunu basit bir python programı ile de 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 yalnızca tek bir dişe sahip olması durumu dışında, sadece ipliği uyuyacaktır, bu durumda ipliği ve işlemi etkili bir şekilde uyuyacaktır.
Uyku ile ilgili python belgeleri bunu belirtmez, bu yüzden kesinlikle karışıklığı anlayabiliyorum!
sleep(3)
diyor ki: "sleep (), çağrılan iş parçacığını saniyeler saniye geçene veya yok sayılmayacak bir sinyal gelene kadar uyku moduna geçirir ." Ve Python dokümantasyon hatası var .
İş parçacığı engellenir, ancak işlem hala canlıdır.
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ığı engellenir ve diğer iş parçacıkları hala işlem içinde çalışır.
Süreç tek başına çalıştırılamaz. Yürütme ile ilgili olarak, süreç sadece evreler için bir kaptır. Yani süreci hiç duraklatamazsınız. İşlem için geçerli değildir.
sleep
komutun duraklayacağı şey olan bir işlemi (tek bir iş parçacıklı, soyut anlamda) çalıştırıyor .
aynı iş parçacığında yürütülürse bir iş parçacığını ana koddan yürütülmediğinde engeller