Ho uno script python e un programma C (ho scritto entrambi, quindi ho il sorgente). Ho bisogno di passare grandi quantità di dati dallo script Python che chiamano molte volte il programma C. In questo momento lascio che l'utente scelga di passarli con un file ascii o un file binario, ma entrambi sono piuttosto lenti e inutili (voglio dire, i file sono utili se si desidera archiviare i dati, ma io cancello questi file alla fine di il copione). os.system non funziona, gli argomenti sono troppi. (Anche il programma C usa i file per restituire dati a Python, ma questo è molto meno dati)Passaggio di molti dati dal programma Python al programma C
Mi chiedo che cosa posso usare per rendere questo scambio veloce. Scrivere i file su un disco ram? Se è così, come posso fare questo?
Ho sentito è possibile chiamare le funzioni da dll utilizzando i tipi, ma non so come compilare il mio programma come dll (io uso wxdevC++ su win 7 64). Oppure avvolgilo, ma ancora non so se può funzionare e se è efficiente ..
Qualcuno può dirmi come posso fare questo?
(i dati sono vertici di una mesh 3D)
EDIT: Forse più informazioni possono aiutare. Sto eseguendo lo script python all'interno di un altro programma (blender (open source)), e viene chiamato più volte (di solito più di 500 volte) perché è all'interno di un ciclo. Lo script invia informazioni sul vertice (1 int index e 3 float coords) al programma, e il programma dovrebbe restituire molti vertici (solo indice int, perché posso trovare i vertici corrispondenti con python). Quindi questo non è interattivo, è più simile a una funzione (ma è scritto in C). Il programma script + C (che sono componenti aggiuntivi di Blender) che sto scrivendo dovrebbe essere multipiattaforma perché verrà ridistribuito (darò la fonte e programmi compilati). Forse questa nota può aiutare: il programma è in realtà scritto in C, e da python posso conoscere l'indirizzo in memoria della struttura che contiene i dati dei vertici. Se solo so come farlo, dovrebbe essere meglio passare al programma C solo un indirizzo, e da lì trovare tutti gli altri vertici (sono memorizzati nella lista). Ma per quanto ne so, non posso accedere allo spazio di memoria di un altro programma, e non so se chiamare il programma con pipe o qualsiasi altra cosa inizializzi un nuovo thread o venga eseguito all'interno dello script (che in realtà viene eseguito sotto il filo Blender) Ps: here the source e qui (3) dovrebbe essere la definizione struct
(3): frullatore/source/frullatore/makesdna/DNA_meshdata_types.h
ho scritto il programma C, posso cambiare come voglio. Quindi comunicare qualcosa con le pipe è come scrivere nello stdin? –
Se ho capito bene, si. Pubblicherò un esempio per ogni evenienza. – senderle
Ok, ho capito il tuo codice. Sfortunatamente avrò ridistribuito il codice, quindi preferisco usare solo le librerie standard (ho visto che l'istante è una libreria esterna). Proverò con le pipe. E ti disturbo un po 'di più: pensi che fare una libreria condivisa e chiamarla con i ctype funzionerebbe altrettanto? Btw davvero interessante la cosa in linea! –