Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 More Python Embedding Trouble
#1
Shy
I'm trying to run a basic C/Python API, I am using Python3.6
https://docs.python.org/3.6/extending/em...n-overview

My Python File Looks like
import numpy as np
#import random
class Multiply:
    def __init__(self):
        self.x = 2
        self.y = 2
        self.a = 0

    def multiply(self):
        self.a = self.x * self.y
        print("Result of: {} * {}".format(self.x,self.y))
        return self.a


My C File Looks Like
#include </usr/include/python3.6m/Python.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pClass;
    PyObject  *pValue, *pDict, *pInstance;

    int i, arg[2];

    Py_Initialize();

    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append(\".\")");


    pName = PyUnicode_DecodeFSDefault("with_numpy_import");
    pModule = PyImport_Import(pName);
    pDict = PyModule_GetDict(pModule);

    pClass = PyDict_GetItemString(pDict, "Multiply");

    Py_DECREF(pName);

    if (PyCallable_Check(pClass)){
    pInstance = PyObject_CallObject(pClass, NULL);
    }


    if( argc > 4 ){
      for (i = 0; i < argc - 4; i++){
          arg[i] = atoi(argv[i + 4]);
  }

      pValue = PyObject_CallMethod(pInstance, argv[3], "(ii)", arg[0], arg[1]);

  }else{
      pValue = PyObject_CallMethod(pInstance, "multiply", NULL);
  }

  if(pValue != NULL){
      printf("Return of call : %d\n", PyLong_AsLong(pValue));
      Py_DECREF(pValue);
  }else{
  PyErr_Print();
  }

  // Clean up
  Py_DECREF(pModule);
  Py_DECREF(pDict);
  Py_DECREF(pInstance);
  Py_DECREF(pClass);

  Py_Finalize();

  //////// Start Over ////////

  Py_Initialize();

  PyRun_SimpleString("import sys");
  PyRun_SimpleString("sys.path.append(\".\")");


  pName = PyUnicode_DecodeFSDefault("with_numpy_import");
  pModule = PyImport_Import(pName);
  
  

  return 0;
}



Why do I get a segmentation error when I import numpy? I can import random and it runs perfectly fine after I comment out import numpy. I have observed that this segmentation error occurs when I use modules that have been brought in with pip.

Is it safe to assume I can run Py_Initialize(); and Py_Finalize(); multiple times in one program?

Please advise. Confused
Quote
#2
It could be related to the Bugs and Caveats section in the documentation of Py_FinalizeEx(). Try to use Py_Initialize() and Py_Finalize() only once to see if it changes anything.
Quote
#3
If I only call Py_Initialize() and Py_Finalize() once it works, but is there a reason why Py_Initialize() and Py_Finalize() can't be called twice? It works with import random?
Quote
#4
The Python Documentation Wrote:Bugs and caveats: The destruction of modules and objects in modules is done in random order; this may cause destructors (__del__() methods) to fail when they depend on other objects (even functions) or modules. Dynamically loaded extension modules loaded by Python are not unloaded. Small amounts of memory allocated by the Python interpreter may not be freed (if you find a leak, please report it). Memory tied up in circular references between objects is not freed. Some memory allocated by extension modules may not be freed. Some extensions may not work properly if their initialization routine is called more than once; this can happen if an application calls Py_Initialize() and Py_FinalizeEx() more than once.
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Trouble processing file villumanati 1 70 Jul-30-2019, 04:17 AM
Last Post: Larz60+
  Calling Extended Embedding Python as shared library jibarra 0 115 Jul-19-2019, 05:22 PM
Last Post: jibarra
  Trouble importing modules on a new python version snackman_barry 2 142 Jul-12-2019, 11:15 AM
Last Post: snackman_barry
  Python Embedding jibarra 4 228 Jul-11-2019, 03:25 PM
Last Post: jibarra
  Raspberry - Python 3.7 - Installation trouble madjo1983 2 185 Jul-07-2019, 02:06 AM
Last Post: DeaD_EyE
  Embedding or adding IDE like "repl" inside Flask app sray 1 123 Jul-03-2019, 03:13 PM
Last Post: nilamo
  trouble with os.listdir on a network drive lconner 10 456 Jun-04-2019, 07:16 PM
Last Post: DeaD_EyE
  Embedding Python into a simulator siggi 0 234 Apr-24-2019, 07:42 PM
Last Post: siggi
  Trouble Understanding Why This Code Works crocolicious 2 268 Apr-09-2019, 05:24 PM
Last Post: crocolicious
  Trouble writing over serial EngineerNeil 1 281 Apr-07-2019, 08:17 PM
Last Post: j.crater

Forum Jump:


Users browsing this thread: 1 Guest(s)