> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Procesamiento en paralelo en Linux

> Ejecute el procesamiento en paralelo de ABBYY FineReader Engine en Linux con MultiProcessingParams mediante FRDocument o BatchProcessor, incluidos los requisitos de RAM para CJK y árabe.

Si procesa grandes volúmenes de documentos, el Reconocimiento óptico de caracteres (OCR) puede requerir muchos recursos de procesamiento. A menudo resulta conveniente utilizar sistemas con varias CPU para aumentar la velocidad de procesamiento, y ABBYY FineReader Engine ofrece varias formas de aprovechar las capacidades de multiprocesamiento de su configuración de hardware.

En esta sección se describen los posibles escenarios de uso y se ofrecen recomendaciones para elegir el modo de multiprocesamiento más adecuado para su tarea, junto con estadísticas de pruebas. También incluye enlaces a los [ejemplos de código](/es/fine-reader/engine/guided-tour/samples), que proporcionan implementaciones de multiprocesamiento.

Para usar el multiprocesamiento, debe establecer la propiedad [MultiProcessingParams](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/properties#multiprocessingparams) del objeto Engine con los valores apropiados.

ABBYY FineReader Engine admite dos objetos diferentes que proporcionan multiprocesamiento desde una sola instancia de Engine. Se trata del objeto [FRDocument](/es/fine-reader/engine/api-reference/document-related-objects/frdocument) (consulte [Procesamiento con el objeto FRDocument](/es/fine-reader/engine/guided-tour/advanced-techniques/parallel-processing/parallel-processing-in-linux#frdocument)) y del objeto [BatchProcessor](/es/fine-reader/engine/api-reference/batch-processor/batchprocessor) (consulte [Procesamiento con Batch Processor](/es/fine-reader/engine/guided-tour/advanced-techniques/parallel-processing/parallel-processing-in-linux#batchprocessor)).

<Warning>
  Tenga en cuenta que el procesamiento en paralelo requiere más RAM que el procesamiento secuencial. La recomendación general para una estación de trabajo es 350 MB \* (número de núcleos) + 450 MB de RAM y, si procesa documentos en árabe o en [idiomas CJK](/es/fine-reader/engine/guided-tour/advanced-techniques/recognizing-cjk-languages#cjk), 850 MB \* (número de núcleos) + 750 MB de RAM.
</Warning>

<div id="usage-scenarios">
  ## Escenarios de uso
</div>

Daremos por sentado que procesa una gran cantidad de documentos. Pero también debemos tener en cuenta los resultados que necesita obtener y elegir la mejor forma de implementar su tarea. Los distintos escenarios que deben considerarse son:

* Convertir documentos multipágina con un gran número de páginas. Por lo general, esto significa procesar libros, informes extensos, etc. En este caso, puede reconocer las páginas del documento en paralelo, luego realizar la síntesis en el proceso principal y volver a exportar en paralelo. También puede, si usa un grupo de Engines, procesar varios documentos multipágina simultáneamente, pero el consumo de memoria puede ser enorme e incluso provocar errores de "memoria insuficiente".
* Convertir una gran cantidad de documentos de una sola página. Este es el caso cuando procesa facturas, contratos, cartas, etc. El procesamiento en paralelo es lo más sencillo en esta situación, ya que los documentos de una sola página no dependen unos de otros y no requieren grandes cantidades de memoria al mismo tiempo.
* Procesar una gran cantidad de imágenes y buscar en ellas la información necesaria o trabajar con los resultados del reconocimiento de alguna otra manera. Puede que no necesite convertir la mayoría a un formato editable, por lo que la velocidad de la síntesis y de la exportación no es un problema. La operación que se realizará en varios procesos consiste en iterar por los bloques de layout y acceder a los resultados del reconocimiento de los bloques de texto.

<Note>
  Si desea usar el procesamiento en paralelo para la exportación, tenga en cuenta que esta función solo es compatible con la exportación a PDF (excepto el modo TextOnly) y con el formato PPTX.
</Note>

<div id="recommendations-and-restrictions">
  ## Recomendaciones y restricciones
</div>

* Para el procesamiento en paralelo de documentos de varias páginas, recomendamos usar FRDocument. Es la opción de multiprocesamiento más fácil de implementar, ya que no es necesario implementar interfaces adicionales.<br />La apertura, el preprocesamiento, el análisis y el reconocimiento se realizan en paralelo; la síntesis del documento se realiza secuencialmente en el proceso principal y, a continuación, la exportación a PDF (excepto en el modo TextOnly) y a PPTX se realiza en paralelo.

* Para procesar muchos documentos de una sola página que se reciben desde alguna fuente (como un escáner), recomendamos BatchProcessor.<br />La ventaja de este método es que puede utilizarse cuando no conoce de antemano cuántos documentos habrá, estos pueden ser de distintos tipos y deben procesarse directamente a medida que llegan. La desventaja es que requiere más esfuerzo de implementación: tiene que implementar interfaces para un adaptador de archivos y una fuente de imágenes personalizada.<br />Todas las etapas del procesamiento se realizan en paralelo porque, en el caso de los documentos de una sola página, la síntesis de página y de documento se realizan por separado para cada página.

<Note>
  La exportación en paralelo no se admite en escenarios con Batch Processor.
</Note>

Para capturar y gestionar los eventos que se producen durante el procesamiento en paralelo, puede usar la interfaz [IParallelProcessingCallback](/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/iparallelprocessingcallback). Esta interfaz puede ser muy útil para gestionar situaciones problemáticas. Por ejemplo, cuando se produce un error de tiempo de espera, la interfaz [IParallelProcessingCallback](/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/iparallelprocessingcallback) proporciona varias soluciones al problema según las preferencias del usuario. Para obtener más información, consulte [IParallelProcessingCallback::OnWaitIntervalExceeded](/es/fine-reader/engine/api-reference/supplementary-objects-and-methods/iparallelprocessingcallback/onwaitintervalexceeded-method).

<Note>
  Los eventos que se producen durante el procesamiento en paralelo de una página se convierten en eventos del documento completo.
</Note>

<div id="processing-with-frdocument-object">
  ## Procesamiento con el objeto FRDocument
</div>

El número de procesos que se ejecutarán se detecta automáticamente en función del número de núcleos de CPU físicos o lógicos disponibles, del número de núcleos de CPU libres permitidos por la licencia y del número de páginas del documento. Para activar el modo multiproceso, haga lo siguiente:

1. Establezca el valor de la propiedad MultiProcessingMode del subobjeto [MultiProcessingParams](/es/fine-reader/engine/api-reference/parameter-objects/multiprocessingparams) del objeto [Engine](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/properties#multiprocessingparams). El procesamiento en paralelo se utiliza si esta propiedad se establece en MPM\_Parallel o MPM\_Auto, y si tanto el número de páginas del documento como el número de núcleos de CPU disponibles son mayores que uno.
2. Ajuste el número de procesos que se ejecutarán mediante la propiedad RecognitionProcessesCount y, si es necesario, especifique los valores de otras propiedades.

Después de configurar los ajustes de multiprocesamiento, puede usar el procedimiento estándar para trabajar con [FRDocument](/es/fine-reader/engine/api-reference/document-related-objects/frdocument). ABBYY FineReader Engine iniciará automáticamente varios procesos de reconocimiento cuando llame a uno de los siguientes métodos del objeto FRDocument:

* [AddImageFile](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addimagefile-method), [AddImageFileFromMemory](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addimagefilefrommemory-method), [AddImageFileFromStream](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addimagefilefromstream-method), [AddImageFileWithPassword](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addimagefilewithpassword-method), [AddImageFileWithPasswordCallback](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addimagefilewithpasswordcallback-method)
* [Preprocess](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/preprocess-method), [PreprocessPages](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/preprocesspages-method)
* [Analyze](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/analyze-method), [AnalyzePages](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/analyzepages-method)
* [Recognize](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method), [RecognizePages](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/recognizepages-method)
* [Process](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method), [ProcessPages](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/processpages-method)
* [Export](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/export-method), [ExportPages](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/exportpages-method), [ExportToMemory](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/exporttomemory-method) — solo para exportar a los formatos PDF (excepto el modo TextOnly) y PPTX

Para cada página del documento, se crea una nueva tarea de procesamiento y esta tarea se asigna a uno de los procesos de reconocimiento. Cuando un proceso de reconocimiento completa la tarea, recibe la siguiente tarea de procesamiento. Esto continúa hasta que se han procesado todas las tareas.

<div id="processing-using-batch-processor">
  ## Procesamiento con Batch Processor
</div>

Cuando se inicializa Batch Processor, se invocan y configuran procesos de reconocimiento asincrónicos. A continuación, el procesador toma archivos de imagen de una fuente de imágenes personalizada. Para cada página del archivo de imagen, se crea una nueva tarea de procesamiento, que se asigna a uno de los procesos de reconocimiento. Si todas las tareas de un archivo ya se han enviado a procesamiento, pero no todos los procesos de reconocimiento están ocupados, se toma el siguiente archivo de imagen de la cola de imágenes de la fuente y se envía a procesamiento. Esto se hace hasta que la primera página de imagen se haya convertido y entregado al usuario. Las páginas se devuelven al usuario en el mismo orden en que se tomaron de la fuente de imágenes.

Para organizar el multiprocesamiento con Batch Processor, haga lo siguiente:

1. Implemente las interfaces [IImageSource](/es/fine-reader/engine/api-reference/batch-processor/iimagesource) e [IFileAdapter](/es/fine-reader/engine/api-reference/batch-processor/ifileadapter), que proporcionan acceso a la fuente de imágenes y a los archivos que contiene.
2. \[opcional] Implemente la interfaz [IAsyncProcessingCallback](/es/fine-reader/engine/api-reference/batch-processor/iasyncprocessingcallback) para controlar el procesamiento. Los métodos de esta interfaz le permiten gestionar errores y/o cancelar el procesamiento.
3. \[opcional] Configure el multiprocesamiento mediante el subobjeto [MultiProcessingParams](/es/fine-reader/engine/api-reference/parameter-objects/multiprocessingparams) del objeto [Engine](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/properties#multiprocessingparams). Tenga en cuenta que no es necesario establecer la propiedad MultiProcessingMode, porque el procesamiento en paralelo se usa de forma predeterminada si trabaja con Batch Processor. Ajuste el número de procesos que se ejecutarán mediante la propiedad RecognitionProcessesCount y, si es necesario, especifique los valores de las demás propiedades.
4. Llame al método [CreateBatchProcessor](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) del objeto Engine para obtener el objeto BatchProcessor.
5. Llame al método [Start](/es/fine-reader/engine/api-reference/batch-processor/batchprocessor/start-method) de este objeto para inicializar el procesador e invocar procesos de reconocimiento asincrónicos. Puede especificar la fuente de imágenes y pasar las referencias a la interfaz IAsyncProcessingCallback y a los objetos de parámetros en la llamada a este método.
6. Llame al método GetNextProcessedPage en un bucle hasta que devuelva 0, lo que significa que ya no quedan más imágenes en la fuente y que todas las imágenes procesadas ya se han devuelto al usuario.

<Warning>
  La página devuelta por el método GetNextProcessedPage existe hasta la siguiente llamada a este método. Por lo tanto, si desea guardar esta página, debe hacerlo mediante los métodos del objeto [FRPage](/es/fine-reader/engine/api-reference/document-related-objects/frpage) o agregarla a un documento existente mediante el método [IFRDocument::AddPage](/es/fine-reader/engine/api-reference/document-related-objects/frdocument/addpage-method) ANTES de la siguiente llamada al método GetNextProcessedPage.
</Warning>

El paquete de distribución de ABBYY FineReader Engine incluye el ejemplo [BatchProcessing](/es/fine-reader/engine/guided-tour/samples#batchprocessing), que muestra cómo usar Batch Processor.

<div id="see-also">
  ## Consulte también
</div>

[FRDocument](/es/fine-reader/engine/api-reference/document-related-objects/frdocument)

[BatchProcessor](/es/fine-reader/engine/api-reference/batch-processor/batchprocessor)

[MultiProcessingParams](/es/fine-reader/engine/api-reference/parameter-objects/multiprocessingparams)

[Recorrer las páginas del documento](/es/fine-reader/engine/guided-tour/advanced-techniques/iterating-document-pages)
