Non ho familiarità con asyncore e ho una conoscenza molto limitata della programmazione asincrona, tranne che per alcune introduzioni introduttive.richiami asyncore che lanciano discussioni ... ok per fare?
Sono più familiare con i thread e li uso in tutte le mie app. Un'app specifica utilizza un database couchdb come interfaccia. Ciò comporta la longpolling del db alla ricerca di modifiche e aggiornamenti. Il modulo che uso per couchdb è couchdbkit. Utilizza un ciclo asyncore per controllare queste modifiche e inviarle a un callback.
Quindi, deduco da questo callback è dove avvio i miei thread di lavoro. Sembra un po 'rozzo mescolare programmazione asincrona e thread. Mi piace molto couchdbkit, ma preferisco non introdurre problemi nel mio programma.
Quindi, la mia domanda è, è sicuro sparare thread da un callback asincrono?
Ecco po 'di codice ...
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.
Aggiornamento:
Dopo aver guardato su questo di più, ho una domanda aggiuntiva per i guru couchdbkit. Ci saranno potenzialmente centinaia di thread usando il database. Come puoi vedere nel mio esempio di codice, sto creando un'istanza di un oggetto couchdbkit.Database per thread. Penso che questo possa essere uno spreco. Quindi, va bene per un singolo oggetto di database essere usato globalmente tra i thread?
Yea creare un nuovo thread per ordine di lavoro è l'idea. Ogni lavoratore aprirà un tunnel ed eseguirà varie attività di manutenzione su un dispositivo remoto. Non ho considerato un pool di thread, ma forse visto come vengono utilizzati i callback, questa potrebbe essere una buona idea. Grazie per l'input. – sbartell