إيقاف التحويل أو التحميل باستخدام InterruptMonitor عندما يستغرق وقتًا طويلًا مع Python.NET

سيناريوهات الاستخدام المحتملة

يسمح Aspose.Cells لك بإيقاف تحويل دفتر العمل إلى صيغ مختلفة مثل PDF، HTML وغيرها باستخدام كائن InterruptMonitor عندما يستغرق الأمر وقتًا طويلاً. غالبًا ما يكون عملية التحويل كثيفة لوحدة المعالجة المركزية والذاكرة، وغالبًا ما يكون من المفيد إيقافها عندما تكون الموارد محدودة. يمكنك استخدام InterruptMonitor لإيقاف التحويل وكذلك لإيقاف تحميل دفاتر العمل الضخمة. يرجى استخدام الخاصية Workbook.interrupt_monitor لإيقاف التحويل والخاصية LoadOptions.interrupt_monitor لإيقاف تحميل دفاتر العمل الضخمة.

توقّف عن التحويل أو التحميل باستخدام InterruptMonitor عندما يستغرق وقتًا طويلاً

يشرح الكود العينة التالي استخدام كائن InterruptMonitor. يحول الكود ملف إكسل كبير إلى 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.")