Dalam Python untuk * nix, apakah time.sleep()
memblokir utas atau prosesnya?
Dalam Python untuk * nix, apakah time.sleep()
memblokir utas atau prosesnya?
Jawaban:
Itu memblokir utas. Jika Anda melihat di Modul / timemodule.c di sumber Python, Anda akan melihat bahwa dalam panggilan ke floatsleep()
, bagian substantif dari operasi sleep dibungkus dalam blok Py_BEGIN_ALLOW_THREADS dan Py_END_ALLOW_THREADS, yang memungkinkan utas lain untuk terus mengeksekusi saat saat ini. satu tertidur. Anda juga dapat menguji ini dengan program python sederhana:
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()
Yang akan dicetak:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Itu hanya akan tidur utas kecuali dalam kasus di mana aplikasi Anda hanya memiliki satu utas, dalam hal ini ia akan tidur utas dan secara efektif proses juga.
Dokumentasi python tentang tidur tidak menentukan ini, jadi saya pasti bisa mengerti kebingungan!
Utas akan memblokir, tetapi prosesnya masih hidup.
Dalam aplikasi berulir tunggal, ini berarti semuanya diblokir saat Anda tidur. Dalam aplikasi multithreaded, hanya utas yang Anda 'tidur' secara eksplisit akan diblokir dan utas lainnya masih berjalan dalam proses.
Proses tidak bisa dijalankan dengan sendirinya. Sehubungan dengan eksekusi, proses hanyalah wadah untuk utas. Berarti Anda tidak dapat menghentikan proses sama sekali. Ini sama sekali tidak berlaku untuk proses.
sleep
perintah yang akan dijeda.
ia memblokir utas jika dijalankan dalam utas yang sama tidak jika dijalankan dari kode utama