2010-07-18 4 views
1

j'ai un exemple qui devrait montrer ce que je voudrais faireexécuter des fonctions dans une file d'attente

queue = 2 

def function(): 
    print 'abcd' 
    time.sleep(3) 

def exec_times(times): 
    #do something 
    function() 

def exec_queue(queue): 
    #do something 
    function() 

exec_times(3) 
#things need be working while it waiting for the function finish 
time.sleep(10) 

le résultat devrait être

abcd 
abcd 

#after finish the first two function executions 
abcd 

donc, il y a une façon de le faire sans utiliser trhead?

Je veux dire une fonction glib pour faire ce travail.

+1

Vous aurez besoin d'une sorte de modèle de threading/multiprocess pour avoir une exécution simultanée. –

Répondre

2

Si vous voulez éviter les threads, une option consiste à utiliser plusieurs processus. Si vous êtes sur python 2.6, jetez un oeil au module multiprocessing. Si python 2.5, regardez pyprocessing.

Note « Process Pools » dans la documentation pour multitraitement, qui semblent répondre à vos besoins:

On peut créer un pool de processus qui exécutent des tâches qui lui sont soumises à la classe de la piscine.

multiprocessing.Pool classe ([des processus [, initialiseur [, initargs [, maxtasksperchild]]]])

Un objet pool de processus qui contrôle un groupe de processus de travail auquel les emplois peuvent être soumis. Il prend en charge résultats asynchrones avec délais d'attente et les rappels et possède une implémentation de mappage parallèle.

+0

Je pense à quelque chose comme le glib.timeout_add (intervalle, rappel, ...) à la place exécuter fonction à chaque intervalle, il continuera à regarder la fonction jusqu'à ce qu'il se termine, puis le rappel est appelé. merci pour la réponse – killown

+0

Jetez un oeil à Process Pools - voir la mise à jour dans ma réponse. – ars

+0

Notez que le paramètre maxtasksperchild n'est disponible que dans Python 2.7 –

Questions connexes