Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo <p...@develer.com> ha scritto:
Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a > qualcosa tipo pyrex? ma LOL. Beh il mio intento è anche quello di studiarmi le API e credo che usandole direttamente nel C sia il modo migliore, anche perchè ho in mente un paio di moduli in cui dovrei usare delle librerie in C, diciamo che le scuse per questa scelta non mancano :p certo che poi la soluzione da te proposta è migliore quando è, ad esempio, per lavoro, ma non è questo il mio caso -non ancora-. > La documentazione di PyModule_AddObject sembra suggerire che devi > passargli il risultato della funzione Py_InitModule [1] o analoghe. Questo > va fatto nella funzione di inizializzazione del modulo (initpymod nel tuo > caso). > Ah ecco, io pensavo dovessi proprio usare PyModule_New, ho invece fatto come dici tu, salvando il riferimento della Py_InitModule() e provando con quello e funziona tutto alla perfezione :) > Io comunque non ho mai usato PyModule_AddObject: per un esempio puoi > vedere questo semplice (2 funzioni e una costante stringa) modulo di > estensione [2]: il codice della initXXX() usa: > > - Py_InitModule4 per creare il modulo > - PyModule_GetDict per ottenere il dizionario del modulo > - PyDict_SetItemString per aggiungere oggetti al dizionario del modulo. > Uhm, è bene tenerlo a mente :) nel mio caso comunque và benissimo PyModule_AddObject, in quanto devo solo rendere disponibile come variabile un dizionario con dei valori predefiniti per un utilizzo rapido del modulo. > Lo scheletro di questo modulo l'ho creato usando un tool mezzo abbandonato > che si trova nella distribuzione sorgente di Python: Tools/modulator. Ha un > po' di bit rot ma ce l'ha fatta a produrre uno scheletro che poi ho finito > a mano. > Darò una occhiata anche a questo, ma se già dici che è mezzo abbandonato... le alternative non mancano e poi, sinceramente, il modulo in questione l'ho scritto da zero e ho ottenuto subito qualcosa di funzionante per alcuni test. > > Comunque appena serve qualcosa un pelino più complessa ti sconsiglio di > procedere a mano con l'API C nuda e cruda e ti consiglio invece > Pyrex/Cython. > > [1] http://docs.python.org/c-api/allocation.html#Py_InitModule > [2] > http://code.google.com/p/py-setproctitle/source/browse/src/setproctitle.c > Già, credo proprio che darò un occhio a Pyrex, l'avevo già fatto ma mai seriamente e soprattutto senza mai usarlo. Grazie ancora per il tuo aiuto, sei stato molto prezioso :) -- Alessandro A.
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python