Прекратить конвертацию или загрузку с помощью InterruptMonitor, когда процесс занимает слишком много времени с помощью Python.NET.

Возможные сценарии использования

Aspose.Cells позволяет остановить преобразование рабочей книги в различные форматы, такие как PDF, HTML и др., с помощью объекта InterruptMonitor, когда оно занимает слишком много времени. Процесс преобразования часто требует много ресурсов CPU и памяти, и его можно приостановить при нехватке ресурсов. Можно использовать InterruptMonitor для остановки преобразования и Workbook.interrupt_monitor для остановки загрузки больших рабочих книг.

Прекратите преобразование или загрузку с использованием объекта InterruptMonitor, если это занимает слишком много времени

В следующем образце кода объясняется использование объекта InterruptMonitor. Код преобразует довольно большой файл Excel в PDF. Это займет несколько секунд (т.е. более 30 секунд) для преобразования из-за этих строк кода.

# Access cell J1000000 and add some text inside it.
cell = ws.cells.get("J1000000")
cell.put_value("This is text.")

Как вы видите, J1000000 — довольно дальняя ячейка в XLSX-файле. Однако метод wait_for_while_and_then_interrupt() прерывает конвертацию через 10 секунд, и программа завершается. Используйте следующий код для выполнения примера.

StopConversionOrLoadingUsingInterruptMonitor().test_run()

Образец кода

import os
import threading
import time
from aspose.cells import Workbook, Worksheet, CellsException, ExceptionType
from aspose.cells import InterruptMonitor

class StopConversionOrLoadingUsingInterruptMonitor:
    # Output directory
    output_dir = None  # Will be set using GetOutputDirectory()

    def __init__(self):
        # Create InterruptMonitor object
        self.im = InterruptMonitor()
        self.output_dir = self.get_output_directory()

    @staticmethod
    def get_output_directory():
        current_dir = os.path.dirname(os.path.abspath(__file__))
        return os.path.join(current_dir, "output")

    def create_workbook_and_convert_to_pdf(self, monitor_thread):
        # Create a workbook object
        wb = Workbook()
        # Assign InterruptMonitor object
        wb.interrupt_monitor = self.im

        # Access first worksheet
        ws = wb.worksheets[0]

        # Access cell J1000000 and add text
        cell = ws.cells.get("J1000000")
        cell.put_value("This is text.")

        try:
            # Save to PDF
            output_path = os.path.join(self.output_dir, "output_InterruptMonitor.pdf")
            wb.save(output_path)
            print("Excel to PDF - Successful Conversion")
            # Interrupt monitor thread
            monitor_thread.interrupt()
        except CellsException as ex:
            if ex.code == ExceptionType.INTERRUPTED:
                print(f"Conversion process interrupted - Message: {ex.message}")
            else:
                raise

    def wait_and_interrupt(self):
        try:
            time.sleep(10)
            self.im.interrupt()
        except KeyboardInterrupt as e:
            print(f"Monitor thread interrupted - Message: {e}")

    def test_run(self):
        monitor_thread = threading.Thread(target=self.wait_and_interrupt)
        conversion_thread = threading.Thread(
            target=self.create_workbook_and_convert_to_pdf,
            args=(monitor_thread,)
        )

        monitor_thread.start()
        conversion_thread.start()

        monitor_thread.join()
        conversion_thread.join()

    @classmethod
    def run(cls):
        converter = cls()
        converter.test_run()
        print("StopConversionOrLoadingUsingInterruptMonitor executed successfully.")