Tengo un script python y un programa C (los escribí a ambos, así que tengo el código fuente). Necesito pasar grandes cantidades de datos de la secuencia de comandos python que llaman muchas veces al programa C. En este momento, le permito al usuario elegir entre pasarlos con un archivo ascii o un archivo binario, pero ambos son bastante lentos e inútiles (es decir, los archivos son útiles si desea almacenar los datos, pero elimino estos archivos al final de la secuencia de comandos). os.system no funciona, los argumentos son demasiado. (el programa C también usa archivos para devolver datos a python, pero esto es mucho menos datos)Pase muchos datos desde Python al programa C
Me pregunto qué puedo usar para hacer este cambio rápido. ¿Escribir los archivos en un disco RAM? Si es así, ¿cómo puedo hacer esto?
Escuché que es posible llamar funciones de dll utilizando ctypes, pero no sé cómo compilar mi programa como dll (uso wxdevC++ en win 7 64). O envuélvalo, pero todavía no sé si puede funcionar y si es eficiente ...
¿Alguien me puede decir cómo puedo hacer esto?
(los datos son vértices de una malla 3D)
EDIT: informaciones sobre tal vez más puede ayudar. Estoy ejecutando el script de python dentro de otro programa (blender (código abierto)), y lo llamo muchas veces (generalmente más de 500 veces) porque está dentro de un ciclo. El script envía información de vértices (1 índice interno y 3 coordenadas flotantes) al programa, y el programa debe devolver muchos vértices (solo índice interno, porque puedo encontrar los vértices correspondientes con python). Entonces esto no es interactivo, es más como una función (pero está escrito en C). El script + C (que son complementos de Blender) que estoy escribiendo debe ser multiplataforma porque se redistribuirá (daré los programas fuente y compilados). Quizás esta nota pueda ayudar: el programa en realidad está escrito en C, y de python puedo saber la dirección en la memoria de la estructura que contiene los datos de los vértices. Si solo sé cómo hacer esto, debería ser mejor pasar al programa C solo una dirección, y de allí encontrar todos los demás vértices (están almacenados en la lista). Pero hasta donde sé, no puedo acceder al espacio de memoria de otro programa, y no sé si llamar al programa con pipes o lo que sea inicialice un nuevo hilo o se ejecute dentro del script (que en realidad se ejecuta bajo el hilo Blender) Sal: here the source y aquí (3) debe ser la definición struct
(3): batidora/fuente/licuadora/makesdna/DNA_meshdata_types.h
escribí el programa en C, que pueden cambiar la forma en que quiero. ¿Entonces comunicar algo con tuberías es como escribir en el stdin? –
Si te entiendo correctamente, sí. Voy a publicar un ejemplo por si acaso. – senderle
Ok, yo cumplo con tu código. Lamentablemente tendré que redistribuir el código, por lo que prefiero usar solo bibliotecas estándar (vi que ese instante es una biblioteca externa). Lo intentaré con tuberías. Y te molesto un poco más: ¿crees que hacer una biblioteca compartida y llamarlo con tipos también funcionaría? ¡De verdad que es interesante la cosa en línea! –