асинкорные обратные вызовы запуска темы ... хорошо?

StackOverflow https://stackoverflow.com/questions/4704285

Вопрос

Я не знаю Асинкор, и имеют очень ограниченное знание асинхронного программирования, за исключением нескольких вступлений в извращенные учебники.

Я больше всего знаком с темами и использую их во всех моих приложениях. Одно конкретное приложение использует Couchdb База данных как его интерфейс. Это включает в себя долгосрочную кость БД в поисках изменений и обновлений. Модуль, который я использую для CouchDB Couchdbkit. Анкет Он использует асинкорный цикл, чтобы наблюдать за этими изменениями и отправить их на обратный вызов.

Итак, я полагаю, что из этого обратного вызова я запускаю свои рабочие потоки. Это кажется немного грубым, чтобы смешать асинхронное и резьбое программирование. Мне очень нравится 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 на поток. Я думаю, что это может быть расточительно. Итак, нормально ли для использования одного объекта базы данных глобально среди потоков?

Это было полезно?

Решение

Разве это не создает новый поток каждый раз, когда сервер возвращает новый документ? Я предполагаю, что вы лучше всего создаете пул рабочих потоков до Вы называете что -нибудь на сервере и просто добавляете работу в очередь, что эти потоки читают свою работу в dispatch метод

Но нет никаких причин, по которым смешивание потоков и асинхронное программирование следует считать опасным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top