ΠΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° JPype 1.0.2, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° пристап Π΄ΠΎ Java класи ΠΎΠ΄ Python

Достапно Π½ΠΎΠ²ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅Ρ“ΡƒΡΠ»ΠΎΡ˜ JPype 1.0.2, кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ цСлосСн пристап Π½Π° Python Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π΄ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΎΠ΄ класата Java. Π‘ΠΎ JPype ΠΎΠ΄ Python, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ спСцифични Π·Π° Java Π·Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Java ΠΈ Python ΠΊΠΎΠ΄. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ Jython, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° со Java сС постигнува Π½Π΅ ΠΏΡ€Π΅ΠΊΡƒ создавањС Π½Π° Π²Π°Ρ€ΠΈΡ˜Π°Π½Ρ‚Π° Π½Π° Python Π·Π° JVM, Ρ‚ΡƒΠΊΡƒ ΠΏΡ€Π΅ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ машини ΠΊΠΎΠΈ користат Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠ° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ‚ пристап ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π΅ само Π΄Π° сС постигнат Π΄ΠΎΠ±Ρ€ΠΈ пСрформанси, Ρ‚ΡƒΠΊΡƒ ΠΈ сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° пристап Π΄ΠΎ ситС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ CPython ΠΈ Java. Код Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ дистрибуирани ΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†ΠΈΡ€Π°Π½ ΠΏΠΎΠ΄ Apache 2.0.

Π“Π»Π°Π²Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ кСш ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° Π²ΠΎ ΠΏΠΎΠ²ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Ρ€Π΅Π·ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, ΡˆΡ‚ΠΎ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅Ρ€Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»ΡƒΠ²Π° Π²Π»ΠΈΡ˜Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° пСрформанситС Π½Π° Ρ€Π΅Π·ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚, особСно Π°ΠΊΠΎ истото ΠΏΡ€Π΅ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠ°Ρ‚ΠΈ, ΠΊΠ°ΠΊΠΎ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° циклусот.
  • Од 4 Π΄ΠΎ 100 ΠΏΠ°Ρ‚ΠΈ, Π²ΠΎ зависност ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, сС Π·Π°Π±Ρ€Π·ΡƒΠ²Π° трансфСрот Π½Π° списоци, Ρ‚ΠΎΠΏΠ»ΠΎΠ²ΠΈ ΠΈ Π±Π°Ρ„Π΅Ρ€ΠΈ Π²ΠΎ Π½ΠΈΠ·ΠΈ Π½Π° Java ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΈ. ΠšΠΎΠ½Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° користи ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π±Π°Ρ„Π΅Ρ€ΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°, намСсто API Π½Π° сСквСнца. Кога ќС сС срСтнС Python Π±Π°Ρ„Π΅Ρ€, само ΠΏΡ€Π²ΠΈΠΎΡ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π·Π° ΠΊΠΎΠ½Π²Π΅Ρ€Π·ΠΈΡ˜Π°, бидСјќи ΠΎΠ²ΠΈΠ΅ Π±Π°Ρ„Π΅Ρ€ΠΈ сС Ρ…ΠΎΠΌΠΎΠ³Π΅Π½ΠΈ.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° ΠΈΡΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ (ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Π²ΠΎ JPype 1.0.0, Π½ΠΎ бСшС прСскокнато ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ‚ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ). JPype сСга ја ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° Ρ€ΡƒΡ‚ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΈΡΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° JVM, која сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π° Π±Π»Π°Π³ΠΎΠ΄Π°Ρ‚Π½ΠΎ Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅. Ова Π΄ΠΎΠ²Π΅Π΄ΡƒΠ²Π° Π΄ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. ΠΠΈΡˆΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π½Π΅ сС Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π° (прокси ΠΏΠΎΠ²ΠΈΡ†ΠΈ) сСга ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³ΠΎ Π΄Ρ€ΠΆΠ°Ρ‚ JVM ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ Π·Π°Π²Ρ€ΡˆΠ°Ρ‚. ΠŸΠΎΠ²ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° прокси ќС Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°Π°Ρ‚ ΠΈΡΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚ Π½Π΅ Π·Π°Π²Ρ€ΡˆΠΈ, Π½ΠΎ ќС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠ° Π·Π° ΠΏΡ€Π΅ΠΊΠΈΠ½. Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ сСга сС ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ ΠΈ ΠΏΡ€Π΅Ρ„Ρ€Π»Π΅Π½ΠΈ Π½Π° дискот Π°ΠΊΠΎ Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ сС справуваат со исклучокот ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°ΡˆΠ΅. ΠšΡƒΠΊΠΈΡ‚Π΅ Π·Π° Ρ€Π°ΡΡ‡ΠΈΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° рСсурситС ΠΈ Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚. Кога сС создаваат нишки, сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ ΠΊΡƒΠΊΠΈΡ‚Π΅ AtExit. ΠŸΡ€Π΅ΠΊΡƒ Π΄Π΅ΠΌΠΎΠ½ΠΎΡ‚ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° автоматско ΡΠΏΠΎΡ˜ΡƒΠ²Π°ΡšΠ΅ Π½Π° нишки ΠΏΡ€ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° JVM ΠΎΠ΄ Python. ΠšΠ°Π±Ρ€ΠΈΠΎΠ»Π΅Ρ‚-ΠΊΠΎΠ΄ΠΎΡ‚ ΡˆΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сС справи со Ρ‡ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ ќС виси ΠΊΠΎΠ³Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΈΡΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС најдС Π²ΠΎ упатството Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.
  • ΠžΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π·Π° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€