Ενημερωμένη έκδοση JPype 1.0.2, μια βιβλιοθήκη για πρόσβαση σε τάξεις Java από την Python

Διαθέσιμος νέα έκδοση του interlayer JPype 1.0.2, το οποίο επιτρέπει στις εφαρμογές Python να έχουν πλήρη πρόσβαση σε βιβλιοθήκες κλάσεων στη γλώσσα Java. Με το JPype από την Python, μπορείτε να χρησιμοποιήσετε βιβλιοθήκες ειδικά για Java για να δημιουργήσετε υβριδικές εφαρμογές που συνδυάζουν κώδικα Java και Python. Σε αντίθεση με την Jython, η ενοποίηση με την Java επιτυγχάνεται όχι μέσω της δημιουργίας μιας παραλλαγής Python για το JVM, αλλά μέσω της αλληλεπίδρασης στο επίπεδο και των δύο εικονικών μηχανών που χρησιμοποιούν κοινόχρηστη μνήμη. Η προτεινόμενη προσέγγιση επιτρέπει όχι μόνο την επίτευξη καλής απόδοσης, αλλά παρέχει επίσης πρόσβαση σε όλες τις βιβλιοθήκες CPython και Java. Κωδικός έργου διανέμονται από άδεια σύμφωνα με το Apache 2.0.

Βασικές αλλαγές:

  • Μια κρυφή μνήμη έχει προστεθεί στις κλήσεις μεθόδων για να αποφευχθεί η ανάλυση υπερφόρτωσης, η οποία μειώνει σημαντικά τον αντίκτυπο στην απόδοση της ανάλυσης μεθόδου, ειδικά εάν η ίδια υπερφόρτωση καλείται πολλές φορές, όπως κατά την εκτέλεση βρόχου.
  • Από 4 έως 100 φορές, ανάλογα με τον τύπο δεδομένων, επιταχύνεται η μεταφορά λιστών, πλειάδων και buffers σε συστοιχίες Java primitives. Η μετατροπή χρησιμοποιεί βελτιστοποιημένη επεξεργασία των buffer στη μνήμη, αντί για το Sequence API. Όταν συναντάται ένα buffer Python, μόνο το πρώτο στοιχείο ελέγχεται για μετατροπή, καθώς αυτά τα buffer είναι ομοιογενή.
  • Επεξεργασία λειτουργιών τερματισμού λειτουργίας (εφαρμόστηκε στο JPype 1.0.0, αλλά παραλείφθηκε κατά την προετοιμασία του αρχείου καταγραφής αλλαγών). Το JPype καλεί τώρα τη ρουτίνα τερματισμού λειτουργίας JVM, η οποία επιχειρεί να βγει με χάρη. Αυτό οδηγεί σε αρκετές αλλαγές στη συμπεριφορά. Τα νήματα χωρίς παρασκήνιο (κλήσεις διακομιστή μεσολάβησης) μπορούν πλέον να διατηρήσουν το JVM ανοιχτό μέχρι να ολοκληρωθούν. Οι κλήσεις διακομιστή μεσολάβησης θα επεξεργαστούν τον τερματισμό λειτουργίας μέχρι να ολοκληρωθεί η κλήση, αλλά θα λάβουν ένα μήνυμα ματαίωσης. Τα αρχεία έχουν πλέον κλείσει σωστά και ξεπλένονται στο δίσκο, εάν τα νήματα χειρίζονται την εξαίρεση όπως αναμένεται. Εκτελούνται τα άγκιστρα εκκαθάρισης πόρων και οι οριστικοποιητές. Όταν δημιουργούνται νήματα, καλούνται τα άγκιστρα AtExit. Μέσω του δαίμονα, υλοποιείται η αυτόματη προσάρτηση νήματος κατά τη χρήση του JVM από την Python. Ο κώδικας σφαλμάτων που δεν μπορεί να χειριστεί σωστά την εκκαθάριση νήματος πιθανότατα θα κολλήσει όταν εκτελεστεί ο τερματισμός λειτουργίας. Πρόσθετη τεκμηρίωση μπορείτε να βρείτε στο εγχειρίδιο χρήσης.
  • Το wrapper για το Throwable έλαβε ένα περιτύλιγμα για το Object αντί για το αναμενόμενο αποτέλεσμα, το οποίο οδήγησε σε περίεργες μετατροπές από τις τάξεις Python.
  • Διορθώθηκαν τυπογραφικά λάθη στο σύστημα εισαγωγής που είχαν ως αποτέλεσμα το σφάλμα '»jname» δεν βρέθηκε'.
  • Διασφαλίστηκε ότι το "^C" προωθήθηκε σωστά στο KeyboardInterrupt.
  • Διορθώθηκε το πρόβλημα με τα σύμβολα από την Python 3.5.3. Το PySlice_Unpack εισήχθη σε μια επόμενη έκδοση ενημερωμένης έκδοσης κώδικα (3.5.4) και δεν έπρεπε να είχε χρησιμοποιηθεί.
  • Διορθώθηκε ένα σφάλμα με το numpy.linalg.inv που οδήγησε σε συντριβή. Το ζήτημα έχει εντοπιστεί στην επικοινωνία νημάτων μεταξύ του JVM και ορισμένων άχρηστων γεύσεων. Η προτεινόμενη λύση είναι να καλέσετε το numpy.linalg.inv πριν ξεκινήσετε το JVM.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο