2010-09-14 24 views
3

Je prévois de faire un long processus en arrière-plan avec Python mais je ne suis toujours pas sûr d'utiliser os.spawnle ou thread. J'ai seulement lu à ce sujet donc je n'ai pas beaucoup d'expérience avec spawn ou thread. Y a-t-il une règle générale quand utiliser quoi?Python: spawn ou thread pour un long processus en arrière-plan?

Merci tas

+0

Combien de temps cela va-t-il durer? Peut-être en faire un démon? – Falmarri

+0

Oui, le démon peut être une bonne option. Mais si je veux fourchonner le processus, cela serait-il possible avec le démon? –

Répondre

4

Assurez-vous de prendre en compte le Global Interpreter Lock. Si le processus de longue durée nécessite beaucoup de ressources processeur, vous devriez probablement en faire un processus indépendant. Si d'un autre côté, ça va passer beaucoup de temps à bloquer, alors le GIL n'est pas vraiment un gros problème et vous devriez être bien d'en faire un fil conducteur.

De même, si vous n'avez pas besoin de quelque chose en particulier que os.spawnle fournit, envisagez d'utiliser le package multiprocessing de la bibliothèque standard. Il fournit une interface similaire à celle du package threading et est tout à fait plus facile à utiliser que de se balader avec des processus de génération et de suivi manuels.

+0

N'a jamais pensé au module multiprocessing. Merci d'avoir fait remarquer cela. –

2

La différence évidente est que os.spawnle est utilisé pour démarrer un autre processus en cours d'exécution d'un programme différent , alors qu'un fil serait l'exécution du code qui fait partie du même programme . En fait, si votre processus d'arrière-plan est un autre programme qui existe déjà, alors os.spawnle (ou un autre moyen de créer un processus séparé) est votre seule option; deux threads dans un programme doivent exécuter le même programme.

Si vous vous demandez si vous devez structurer votre propre code pour qu'il soit exécuté en tant que processus séparés ou en tant que threads séparés, jetez un coup d'œil à certains des process v. thread questions like this one pour déterminer lequel correspond le mieux à ce que vous essayez de faire. En particulier, réfléchissez aux ressources que les processus/threads devront partager, à ce qu'ils communiquent entre eux et à la robustesse de chacun - un thread qui se bloque par exemple avec le reste du processus.