저는 asyncore에 익숙하지 않으며 비틀어 진 자습서에 대한 몇 가지 소개를 제외하고는 비동기 프로그래밍 지식이 매우 제한적입니다.asyncore 콜백 스레드 시작 중 ... 할 수 있습니까?
나는 스레드에 가장 익숙하며 모든 응용 프로그램에서 사용합니다. 하나의 특정 응용 프로그램은 인터페이스로 couchdb 데이터베이스를 사용합니다. 이것은 변경 및 업데이트를 찾는 db의 longpolling을 포함합니다. couchdb에 사용하는 모듈은 couchdbkit입니다. asyncore 루프를 사용하여 이러한 변경 사항을보고 콜백으로 보냅니다.
그래서이 콜백은 내 작업자 스레드를 시작하는 지점입니다. 비동기식 프로그래밍과 스레드 프로그래밍을 혼합하는 것은 약간 미숙 한 것처럼 보입니다. 나는 couchdbkit을 정말 좋아하지만 내 프로그램에 문제를 소개하지는 않을 것입니다.
그래서, 내 질문은 비동기 콜백에서 스레드를 시작하는 것이 안전할까요? 여기
는 ... 일부 코드의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.
업데이트 :
이상이 찾고 후, 나는 couchdbkit 지도자에 대한 추가 질문이 있습니다. 잠재적으로 데이터베이스를 사용하는 수백 개의 스레드가 있습니다. 내 코드 샘플에서 볼 수 있듯이 스레드 당 couchdbkit.Database 객체를 인스턴스화합니다. 나는 이것이 낭비일지도 모른다라고 생각한다. 그렇다면 단일 데이터베이스 객체가 스레드간에 전역으로 사용되는 것이 좋습니까?
작업 순서에 따라 새 스레드를 만드는 것이 좋습니다. 각 작업자는 터널을 열고 원격 장치에서 다양한 유지 관리 작업을 수행합니다. 스레드 풀을 고려하지 않았지만 콜백을 사용하는 방법을 생각하면 좋은 아이디어 일 수 있습니다. 입력 해 주셔서 감사합니다. – sbartell