[ NicholasMetropolis @ 31.08.2009. 17:29 ] @
Problem je sledeći:

Imam moju aplikaciju koja treba da komunicira sa Pythonom. Npr. napisao sam neke module za Python koji trebaju da vrte neku simulaciju. Npr:

Code:

import simulation
simulation.init(...)
simulation.advance(...)
simulation.process(...)
simulation.adjust(...)
simulation.advance(...)
....


Dakle, simulaciju trebam interaktivno da kontrolišem iz moje aplikacije. Znam da mogu da embeddujem python u moju aplikaciju, ali onda moja aplikacija stoji sve dok PyRun_SimpleString() ne vrati rezultat, a to je ono što hoću da izbegnem.

Dakle, treba mi način da podignem python interpreter (ne nužno na istom računaru) i da mu šaljem komande. Da li neko može da mi pomogne oko ovoga?
[ alex @ 01.09.2009. 11:57 ] @
U cemu je pisana tvoja aplikacija?

Mozes da koristis tehnike opisane ovde, s tim sto ces koristiti multiprocessing modul kako bi kreirao zasebni intepreter koji bi "vozio" tvoju simulaciju, a iz tvoje aplikacije komunicirao sa tim intepreterom putem multiprocessing.Pipes objekata.

To bi, ovako na prvu loptu, bilo nesto sto bih ti predlozio da probas.
[ NicholasMetropolis @ 01.09.2009. 14:44 ] @
Citat:
alex: U cemu je pisana tvoja aplikacija?


C++

Trebaće mi neko vreme da pogledam ovo, pošto nisam baš wizz za Python, a i multiprocesing u Pythonu mi je nova tema. Ako budem zaglavio negde vikaću.
[ NicholasMetropolis @ 01.09.2009. 19:53 ] @
Well, sada je i ozvaničeno: Ja sam idiot.

Kompletno sam smetnuo sa uma najočiglednije rešenje: Python ima sockets i SSL module koji su idealni za ono što mi treba.
[ alex @ 02.09.2009. 11:46 ] @
To bi znacilo da bi morao da implementiras server (daemon) u Python-u kojeg bi pozivao iz svoje aplikacije. Ukoliko ne implementiras asihrone pozive, opet ces imati isti problem u svojoj aplikaciji sa cekanjem na odgovor.

To je nesto na sta ces morati da obratis paznju. Javi sta si uradio i ako treba pomoc..
[ NicholasMetropolis @ 05.09.2009. 15:34 ] @
Ajde da ne otvaram novi topic. Alex imam Python/C++ pitanje. Problem je sledeći

U C++u sam deklarisao osnovnu i izvedenu klasu:

Code:

struct Parent {
    virtual std::string species() {return std::string("I'm human");}
    virtual std::string greet() {return std::string("I'm parent");}
};

struct Child : Parent {
    std::string greet() {return std::string("I'm child");}
};


i funkciju koja poziva greet metod

Code:

std::string do_greet(Parent* par) {
    return par->greet();
}


Sve ovo sam iskompajlirao u modul za Python pomoću Boost.Python biblioteke. Ovo ispod je sada Pyhton kod. Kada u Pythonu pozovem

Code:

do_greet(parent), do_greet(child)


Dobijem odgovarajuće rezultate. Funkcija pozive odgovarajuće metode osnovne i izvedene klase

Code:

'I'm parent', 'I'm child'


Ako sada u Pythonu izvedem nasleđivanje:

Code:

class GrandParent(Parent) :
     def greet(self) :
          return 'I\'m grandparent'


i poteram

Code:

do_greet(grandparent)


dobijem pogrešan rezultat

Code:

'I'm parent'


greet metod nije izveden kako treba. Šta sam pogrešio?
[ NicholasMetropolis @ 07.09.2009. 09:03 ] @
OK je. Trebalo je malo dublje kopati po dokumentaciji, ali našao sam kako se radi sa virtuelnim funkcijama.