Πολυνηματική στο Aspose.Slides για Python

Εισαγωγή

Αν και η παράλληλη εργασία με παρουσιάσεις είναι δυνατή (πέρα από την ανάλυση/φόρτωση/κλωνοποίηση) και συνήθως όλα πηγαίνουν καλά, υπάρχει μια μικρή πιθανότητα να λάβετε εσφαλμένα αποτελέσματα όταν χρησιμοποιείτε τη βιβλιοθήκη σε πολλαπλά νήματα.

Συνιστούμε έντονα να μην χρησιμοποιείτε μία μοναδική Presentation παρουσία σε περιβάλλον πολλαπλών νημάτων, επειδή μπορεί να προκαλέσει απρόβλεπτα σφάλματα ή αποτυχίες που δεν εντοπίζονται εύκολα.

Δεν είναι ασφαλές να φορτώνετε, αποθηκεύετε και/ή κλωνοποιείτε μια παρουσία της κλάσης Presentation σε πολλαπλά νήματα. Τέτοιες λειτουργίες δεν υποστηρίζονται. Εάν χρειάζεται να εκτελέσετε τέτοιες εργασίες, πρέπει να παραλληλίσετε τις λειτουργίες χρησιμοποιώντας αρκετές διεργασίες μονόνημα, και καθεμιά από αυτές τις διεργασίες θα πρέπει να χρησιμοποιεί τη δική της παρουσία παρουσίασης.

Μετατροπή Διαφανειών Παρουσίασης σε Εικόνες Παράλληλα

Ας υποθέσουμε ότι θέλουμε να μετατρέψουμε όλες τις διαφάνειες από μια παρουσία PowerPoint σε εικόνες PNG παράλληλα. Δεδομένου ότι δεν είναι ασφαλές να χρησιμοποιούμε μία μοναδική παρουσία Presentation σε πολλαπλά νήματα, χωρίζουμε τις διαφάνειες σε ξεχωριστές παρουσιάσεις και μετατρέπουμε τις διαφάνειες σε εικόνες παράλληλα, χρησιμοποιώντας κάθε παρουσία σε ξεχωριστό νήμα. Το παρακάτω παράδειγμα κώδικα δείχνει πώς γίνεται αυτό.

input_file_path = "sample.pptx"
output_file_path_template = "slide_{0}.png"
image_scale = 2

presentation = Presentation(input_file_path)

slide_count = len(presentation.slides)
slide_size = presentation.slide_size.size

conversion_tasks = []


def convert_slide(slide_index):
    # Εξάγετε τη διαφάνεια i σε ξεχωριστή παρουσίαση.
    with Presentation() as slide_presentation:
        slide_presentation.slide_size.set_size(slide_size.width, slide_size.height, SlideSizeScaleType.DO_NOT_SCALE)
        slide_presentation.slides.remove_at(0)
        slide_presentation.slides.add_clone(presentation.slides[slide_index])

        slide_number = slide_index + 1
        slide = slide_presentation.slides[0]

        # Μετατρέψτε τη διαφάνεια σε εικόνα.
        with slide.get_image(image_scale, image_scale) as image:
            image_file_path = output_file_path_template.format(slide_number)
            image.save(image_file_path, ImageFormat.PNG)


with ThreadPoolExecutor() as thread_executor:
    for index in range(slide_count):
        conversion_tasks.append(thread_executor.submit(convert_slide, index))

# Περιμένετε μέχρι να ολοκληρωθούν όλες οι εργασίες.
for task in conversion_tasks:
    task.result()

del presentation

Συχνές Ερωτήσεις

Πρέπει να καλώ τη ρύθμιση άδειας σε κάθε νήμα;

Όχι. Αρκεί να το κάνετε μία φορά ανά διαδικασία/περιοχή εφαρμογής πριν ξεκινήσουν τα νήματα. Εάν η license setup μπορεί να κληθεί ταυτόχρονα (π.χ., κατά την αργή αρχικοποίηση), συγχρονίστε αυτήν την κλήση επειδή η μέθοδος ρύθμισης άδειας από μόνη της δεν είναι ασφαλής ως προς τα νήματα.

Μπορώ να μεταβιβάσω αντικείμενα Presentation ή Slide μεταξύ νημάτων;

Η μεταφορά «ζωντανών» αντικειμένων παρουσίασης μεταξύ νημάτων δεν συνιστάται: χρησιμοποιήστε ανεξάρτητες παρουσίες ανά νήμα ή προ‑δημιουργήστε ξεχωριστές παρουσιάσεις/containers διαφανειών για κάθε νήμα. Αυτή η προσέγγιση ακολουθεί τη γενική σύσταση να μην μοιράζετε μία μοναδική παρουσία παρουσίασης μεταξύ νημάτων.

Είναι ασφαλές να παραλληλοποιήσετε την εξαγωγή σε διαφορετικές μορφές (PDF, HTML, εικόνες) εφόσον κάθε νήμα έχει τη δική του παρουσία Presentation;

Ναι. Με ανεξάρτητες παρουσίες και ξεχωριστές διαδρομές εξόδου, αυτές οι εργασίες συνήθως παραλληλοποιούνται σωστά· αποφύγετε οποιαδήποτε κοινόχρηστα αντικείμενα παρουσίασης και κοινά ρεύματα I/O.

Τι πρέπει να κάνω με τις παγκόσμιες ρυθμίσεις γραμματοσειρών (φακέλους, αντικαταστάσεις) σε πολύνημα;

Αρχικοποιήστε όλες τις παγκόσμιες ρυθμίσεις γραμματοσειρών πριν ξεκινήσετε τα νήματα και μην τις αλλάξετε κατά τη διάρκεια της παράλληλης εργασίας. Αυτό εξαλείφει τις ανταγωνιστικές καταστάσεις κατά την πρόσβαση σε κοινόχρηστους πόρους γραμματοσειρών.