/jcc/java/org/apache/jcc/PythonVM.java
https://github.com/fnp/pylucene · Java · 112 lines · 32 code · 13 blank · 67 comment · 2 complexity · 7881632657e8140594dcead5dbe6a649 MD5 · raw file
- /* ====================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
- package org.apache.jcc;
- public class PythonVM {
- static protected PythonVM vm;
- static {
- System.loadLibrary("jcc");
- }
- /**
- * Start the embedded Python interpreter. The specified
- * program name and args are set into the Python variable sys.argv.
- * This returns an instance of the Python VM; it may be called
- * multiple times, and will return the same VM instance each time.
- *
- * @param programName the name of the Python program, typically
- * /usr/bin/python. This is informational; the program is not
- * actually executed.
- * @param args additional arguments to be put into sys.argv.
- * @return a singleton instance of PythonVM
- */
- static public PythonVM start(String programName, String[] args)
- {
- if (vm == null)
- {
- vm = new PythonVM();
- vm.init(programName, args);
- }
- return vm;
- }
- /**
- * Start the embedded Python interpreter. The specified
- * program name is set into the Python variable sys.argv[0].
- * This returns an instance of the Python VM; it may be called
- * multiple times, and will return the same VM instance each time.
- *
- * @param programName the name of the Python program, typically
- * /usr/bin/python. This is informational; the program is not
- * actually executed.
- * @return a singleton instance of PythonVM
- */
- static public PythonVM start(String programName)
- {
- return start(programName, null);
- }
- /**
- * Obtain the PythonVM instance, or null if the Python VM
- * has not yet been started.
- *
- * @return a singleton instance of PythonVM, or null
- */
- static public PythonVM get()
- {
- return vm;
- }
- protected PythonVM()
- {
- }
- protected native void init(String programName, String[] args);
- /**
- * Instantiate the specified Python class, and return the instance.
- *
- * @param moduleName the Python module the class is defined in
- * @param className the Python class to instantiate.
- * @return a handle on the Python instance.
- */
- public native Object instantiate(String moduleName, String className)
- throws PythonException;
- /**
- * Bump the Python thread state counter. Every thread should
- * do this before calling into Python, to prevent the Python
- * thread state from being inadvertently collected (and causing loss
- * of thread-local variables)
- *
- * @return the Python thread state counter. A return value less
- * than zero signals an error.
- */
- public native int acquireThreadState();
- /**
- * Release the Python thread state counter. Every thread that has
- * called acquireThreadState() should call this before
- * terminating.
- *
- * @return the Python thread state counter. A return value less
- * than zero signals an error.
- */
- public native int releaseThreadState();
- }