linux - 关于python中的Queue与daemon进程?
PHPz
PHPz 2017-04-18 09:47:47
0
1
463

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

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
PHPzhong

Le but de t.daemon=True n'est-il pas de laisser le processus démon s'exécuter en arrière-plan ?

Non.

Tout d’abord, ce n’est pas un processus.

Deuxièmement, « arrière-plan » est un terme désignant le contrôle des tâches (une fonction qui est essentiellement implémentée par le shell de ligne de commande ; d'autres programmes l'ignorent fondamentalement. Même si vous utilisez plusieurs processus ici, cela ne s'applique pas à votre scénario). .

Enfin, les paramètres ici sont un peu redondants. Mais c'est juste "un peu".

Le multithreading n'est pas facile à réaliser. Les signaux, c'est autre chose. Mettez les deux choses ensemble, votre processus Python est désobéissant ~ (En Python, les signaux ne seront soumis qu'au thread principal pour traitement. Le thread principal décide de se fermer après avoir reçu le signal, mais si le processus non-démon ne se termine pas activement , le processus restera là. Ainsi, lorsque j'écris des robots multithread, j'unifie daemon = True, afin qu'il puisse s'arrêter rapidement lorsque Ctrl-C )

.

Au fait, il y a environ un mois ou deux, la liste python-cn a abordé le sujet des threads démons Python. Si vous voulez en savoir plus, vous pouvez aller y jeter un œil.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal