https://docs.python.org/2.7/library/queue.html
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
A thread can be flagged as a “daemon thread”. The significance of this flag is that the entire Python program exits when only daemon threads are left.
上面这个例子中,同时设置q.join()和t.daemon = True是不是自相矛盾?设置q.join()的话也就是说要等Queue中所有thread发送task_done信号,也就是说要让Queue里面的所有thread全部执行完才继续执行下一步。既然这样的话还设置t.daemon = True干什么呢?t.daemon=True的目的不是让守护进程在后台执行吗?
Setting daemon to True will let the main thread exit even though thworkers are blocking
q.join() Causes the main thread to wait for the queue to finish processing all the tasks
Tidak.
Pertama sekali, ia bukan satu proses.
Kedua, "latar belakang" ialah istilah untuk kawalan kerja (fungsi yang pada asasnya dilaksanakan oleh shell baris arahan; program lain pada dasarnya mengabaikannya Walaupun anda menggunakan berbilang proses di sini, ia tidak terpakai pada senario anda .
Akhir sekali, tetapan di sini agak berlebihan. Tetapi ia hanya "sedikit".
Berbilang benang bukan mudah untuk diperbaiki. Isyarat adalah perkara lain. Satukan dua perkara itu, proses Python anda tidak patuh~ (Dalam Python, isyarat hanya akan diserahkan kepada utas utama untuk diproses. Benang utama memutuskan untuk keluar selepas menerima isyarat, tetapi jika proses bukan daemon tidak keluar secara aktif , proses itu akan tergantung di sana. Jadi apabila saya menulis perangkak berbilang benang, saya menyatukan daemon = Benar, supaya ia boleh berhenti dengan cepat apabila Ctrl-C )
.Dengan cara ini, kira-kira sebulan atau dua yang lalu, senarai python-cn membincangkan topik benang daemon Python Jika anda ingin mengetahui lebih lanjut mengenainya, anda boleh pergi dan lihat.