verifique una lista constantemente y haga algo si la lista tiene elementos

Tengo una lista global donde los elementos se agregan constantemente (desde clientes de la red):

mylist = [] def additem(uuid,work): mylist.append(uuid,work) 

Y una función que debería revisar la lista y si hay elementos proceda a ellos:

 def proceeditems(): while True: itemdone = [] if len(mylist) > 0: for item in mylist: try: #This can go wrong and than need to be done again result = gevent.spawn(somework(item)) #result returns the uuid itemdone.append(result.value) except: pass for item in itemdone: mylist[:] = [value for value in mylist if value[0]!=item] 

Así que espero que tengas una idea de lo que trato de hacer, pero creo que el bucle sin fin no parece ser la solución correcta.

En este tipo de caso, debe haber utilizado multiproceso o multiproceso (dependiendo de si el cliente de red se ejecuta en un subproceso diferente o un proceso diferente).

En cualquier caso, debe usar la Queue para administrar los datos entrantes y luego almacenarlos en itemdone luego.

Se define la cola así:

 my_queue = queue.Queue() # or multiprocessing.Queue() 

Luego, más adelante, debe incluir la cola en los argumentos (o si usa subprocesos, puede usar la cola global, como lo hizo)

 def additem(uuid,work,the_queue): the_queue.put((uuid,word)) # Queue in a tuple containing the data def proceeditems(the_queue): while True: item = the_queue.get() # This will block until something is inside the queue try: result = somework(item) itemdone.append(result) except: the_queue.put(item) # If failed, put back to queue for retry. # You don't need the last two lines 

Para detener todo el proceso, puede hacer que la función additem inserte un token especial, y los proceeditems , al recibir el token especial, saldrán del bucle.