Stranica: 1/1.

[Python] Python Daemon

Postano: 17 sij 2013, 21:08
Postao/la Bug
Opet ja samo drugi jezik drugi problem :)
Posto mi ona C aplikacija( http://www.linuxzasve.com/forum/viewtop ... =42&t=9803) pokrece Python aplikaciju na serveru, dolazim u problem da se load dize poprilicno (45-50) i to verovatno zato sto C program otvara/zatvara Py program.
I mislim da mi je jedino resenje da ubacim deamon, koji ce u pozadini raditi i sluziti C aplikaciji.
Py aplikacija proveri jel se IP nalazi u memcached "bazi" vrati 1 ili 0 i zatvori se program.
Ono sto sam an internetu procitao je da za daemon treba da applikacija ima neki while/loop, jel to tacno? Jel radio neko nesto slicno?
Bilo kakav savet bi mi dobro dosao :)

Re: Python Deamon

Postano: 18 sij 2013, 00:34
Postao/la ante003
za tak neke stvari mozes napraviti i ovo:

while true;
do skripta;
sleep 1 m;
done

beskocnacna petlja koja ti izvrsi skriptu, priceka 1 min i onda je opet izvrsi i tako u nedogled. nedostatak ovoga je to sto ne mozes kasnije ubiti tu while petlju osim ako ne ostavis taj terminal upaljen pa da mozes lupit Ctrl + C. A ako zelis ubit while petlju, moras restartat masinu :) (ako postoji nacin da se to ubije nek slobodno netko veli :))

Drugo rjesenje ti je staviti tu naredbu u cron i tada ti je cron izvrsava kako si vec podesis.
Ovo sa cronom je IMO bolje rjesenje od while petlje jer mozes kontrolirat izvrsavanje.

Re: Python Deamon

Postano: 18 sij 2013, 00:38
Postao/la ante003
btw, sad gledam onaj program u C-u sa drugog topica. Zasto to sve ne napises u Pythonu? Onda samo jednom pozoves tu python skriptu i to je to. Cini se lakse od kombiniranja C-a i Pythona.

Re: Python Deamon

Postano: 18 sij 2013, 08:56
Postao/la stefan
ante003 je napisao/la:btw, sad gledam onaj program u C-u sa drugog topica. Zasto to sve ne napises u Pythonu? Onda samo jednom pozoves tu python skriptu i to je to. Cini se lakse od kombiniranja C-a i Pythona.
:thumbs

A što se tiče pozivanja pythona, možeš ga embedati u C++:

Kod: Označi sve

#include <Python.h>
int main(int argc, char *argv[])
{
  Py_SetProgramName(argv[0]);  /* optional but recommended */
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}
Ili ovako pozvati izvršenje py fajla:

Kod: Označi sve

Py_Initialize();

FILE* PythonScriptFile = fopen("Python Scripts/Test.py", "r");
if(PythonScriptFile)
{
    PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
    fclose(PythonScriptFile);
}

Py_Finalize();
Sa Py_Initialize() samo jednom digneš python i onda ga prema potrebi pozivaš da nešto odradi.
Detalje pogledaj na http://docs.python.org/2/extending/embedding.html

Re: Python Deamon

Postano: 18 sij 2013, 19:13
Postao/la Medojedni jazavac
ali stefane, to je C sintaksa :zamisljen :zvizdi

Re: Python Deamon

Postano: 18 sij 2013, 19:42
Postao/la stefan
Medojedni jazavac je napisao/la:ali stefane, to je C sintaksa :zamisljen :zvizdi
Što je "to"?

C++ uključuje C, pa ovo napisano vrijedi i za C i za C++