Pregunta

Estoy familiarizado con asyncore , y tener conocimientos de programación asincrónica muy limitado, excepto para unos pocos intro de tutoriales retorcidos.

Estoy muy familiarizado con las discusiones y las utilizo en todos mis aplicaciones. Una aplicación particular utiliza una base de datos de href="http://www.couchone.com/" rel="nofollow"> couchdb como su interfaz. Esto implica longpolling el PP busca de cambios y actualizaciones. El uso de módulo de E couchdb es couchdbkit . Se usa un aro de asyncore para observar estos cambios y enviarlos a una devolución de llamada.

Por lo tanto, la figura de esta devolución de llamada es donde lanzo mis subprocesos de trabajo. Parece un poco crudo para mezclar la programación asincrónica y roscado. Me gusta mucho couchdbkit, pero prefieren no introducir cuestiones en mi programa.

Por lo tanto, mi pregunta es, ¿es seguro hilos de fuego de una devolución de llamada asincrónica?

Aquí hay algo de código ...

def dispatch(change):
    global jobs, db_url # jobs is my queue
    db = Database(db_url)
    work_order = db.get(change['id']) # change is an id to the document that changed. 
                                  # i need to get the actual document (workorder)

    worker = Worker(work_order, db) # fire the thread
    jobs.append(worker)
    worker.start()
    return


main()
.
.
.

consumer.wait(cb=dispatch, since=update_seq, timeout=10000) #wait constains the asyncloop.

Actualización:

Después de mirar sobre esto más, tengo una pregunta adicional para los gurús couchdbkit. Potencialmente habrá cientos de hilos utilizando la base de datos. Como se puede ver en mi ejemplo de código, estoy crear instancias de un objeto couchdbkit.Database por hilo. Creo que esto puede ser un desperdicio. Así que, ¿está bien para un solo objeto de base de datos que se utiliza a nivel mundial entre los hilos?

¿Fue útil?

Solución

¿No esto crea un nuevo hilo cada vez que el servidor devuelve un nuevo documento? Me imagino que usted es mejor crear un grupo de subprocesos de trabajo antes que llaman nada en el servidor, y acaba de añadir una tarea a la cola que estos flujos leen su trabajo a partir del método dispatch.

Sin embargo, no hay ninguna razón por la rosca y la programación asíncrona de mezcla debe ser considerado peligroso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top