2015-05-05 2 views
5

сайт Стэнфордского CoreNLPStanford CoreNLP Annotators Thread safe?

http://nlp.stanford.edu/software/corenlp.shtml

списки десятков аннотаторами, которые работают как шарм. Я хотел бы использовать экземпляры аннотаторов для общих задач (lemmatization, tagging, parsing) несколькими потоками. Например, чтобы разделить обработку больших массивов (ГБ текста) на потоки или предоставить веб-службы.

В прошлом было обсуждено обращение к LocalThreads, которое, по моему мнению, использует один экземпляр аннотатора для каждого потока (таким образом избегая проблем, связанных с безопасностью потоков). Это вариант, но таким образом все файлы и ресурсы модели должны быть загружены в n раз.

Являются ли аннотаторы (или некоторые из них) потокобезопасными для использования? Я не мог найти ничего убедительного/официального в дискуссиях, документах или вопросах.

ответ

9

Да, аннотаторы предназначены для поточной защиты. Вы можете создать новую AnnotationPipeline (например, новый объект StanfordCoreNLP), а затем многие потоки могут передавать аннотации в этот конвейер без перезагрузки модели для каждого потока.

+0

Если мы используем несколько AnnotationPipelines, будет ли процесс обрабатывать запросы одновременно или он будет стоять внутри? Благодаря! –

+0

Не существует понятия двигателя, независимого от конвейера аннотации. Вызов AnnotationPipeline.annotate() 'будет использовать текущий поток для запуска аннотации. Тем не менее, вы можете иметь несколько потоков, называемых '.annotate()' на той же AnnotationPipeline. –

+0

Спасибо за разъяснение - (если я не ошибаюсь в внутренних библиотеках, что, скорее всего;)), будет ли процесс AnnotationPipeline обрабатывать 2 .annotate() одновременно? Или будет заблокирован второй вызов .annotate() до первого завершения? –

Смежные вопросы