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
  Embedding return in a print statement Tapster 3 118 Oct-07-2019, 03:10 PM
Last Post: Tapster
  Calling Extended Embedding Python as shared library jibarra 0 222 Jul-19-2019, 05:22 PM
Last Post: jibarra
  Python Embedding jibarra 4 346 Jul-11-2019, 03:25 PM
Last Post: jibarra
  Embedding Python into a simulator siggi 0 371 Apr-24-2019, 07:42 PM
Last Post: siggi
  Embedding, windows, and virtual environments mariofutire 0 664 Sep-14-2018, 10:30 AM
Last Post: mariofutire
  [CPP] Embedding Python and use GDB Razazel 4 1,659 Nov-12-2017, 05:59 PM
Last Post: Razazel

Forum Jump:


Users browsing this thread: 1 Guest(s)