Gambas-it

Gambas3 => Programmazione => Topic aperto da: allegfede - 21 Maggio 2013, 11:57:16

Titolo: Lanciare processo in background
Inserito da: allegfede - 21 Maggio 2013, 11:57:16
Per il mio progetto OTVA sto' creando un modulo che permetta l'inserimento di materiale multimediale in un sistema organizzato ed indicizzato.
L'idea e' di fare come youtube, ovvero l'utente carica un filmato dal suo PC e mentre il browser effettua l'upload sui server di google (youtube e' google), l'utente puo' preoccuparsi dell'immissione dei metadati relativi al filmato (tag, nome, descrizione etc.)

Il mio dubbio e' su COME far fare l'upload dal PC dell'utente di OTVA al NAS centrale del sistema OTVA in background rispetto al processo principale.

Ancora meglio sarebbe se l'utente si occupasse solo di indicare quali video (per esempio) caricare, immettere i metadati e premere "salva" e poi fosse un processo in background che analizza la lista dei nuovi inserimenti e procede a caricare le risorse locali nella giusta PATH sul NAS di OTVA (la struttura del filesystem e' prestabilita relativamente ad un parametro "OTVA_ROOT".

Ho letto qualcosa di GB.task, ma niente di risolutivo o codice chiaro.
Qualcuno ha sperimentato? Posso magari lanciare un comand shell in background? .....

Inoltre ..... secondo voi e' indispensabile?

Con connessioni Gigabit i tempi non sono enormi, ma se e' possibile ottimizzare perche' lasciare l'utente a girarsi i pollici? :D

grazias :D
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 21 Maggio 2013, 14:18:00
Non so se può esserti utile la proprietà:  Application.Daemon
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 29 Maggio 2013, 09:58:35
e' confermato.....
trasferire 16 giga da pc a nas  e' lento anche su rete gigabit ......

urge necessita' di lanciare tread di copia separato :D

Lanciare un'altro programmino gambas con parametri path locale e path destinazione che restituisce il progress e al termine un valore di uscita (1=successo 0=fallimento) e poi si termini?
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 29 Maggio 2013, 13:10:35
Lanciare un'altro programmino gambas con parametri path locale e path destinazione che restituisce il progress e al termine un valore di uscita (1=successo 0=fallimento) e poi si termini?

...e... quindi ?
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 29 Maggio 2013, 16:00:19
niente cercavo suggeriementi .... possibili soluzioi ... qualcuno che avesse approcciato un problema analogo ........ vabbe' faccio io e vi faro' sapere :D
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 29 Maggio 2013, 16:33:04
niente cercavo suggeriementi .... possibili soluzioi ... qualcuno che avesse approcciato un problema analogo ........

Vuoi lanciare un altro programma Gambas da un programma Gambas principale ? Puoi spiegarti meglio ?  :coder:
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 29 Maggio 2013, 19:22:41
si nel momento che l'utente riempie i form del mio programma di ingesting (il primario) e preme il tasto SALVA, vengono aggiornati i dati del DB e LANCIATO un programma gambas "figlio" che fa' da server di trasferimento (avete mai provato teracopy?).

Questi inizia a copiare il file locale nell'opportuna destinazione (se applicazione non e' gia' in esecuzione) oppure l'accoda ai trasferimenti in lista.

Il demone comunica lo stato del processo di copia all'applicazione primaria e aggiorna le path nel DB man mano che le copie vengono eseguite.
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 29 Maggio 2013, 23:28:34
si nel momento che l'utente riempie i form del mio programma di ingesting (il primario) e preme il tasto SALVA, vengono aggiornati i dati del DB e LANCIATO un programma gambas "figlio" che fa' da server di trasferimento (avete mai provato teracopy?).

Questi inizia a copiare il file locale nell'opportuna destinazione (se applicazione non e' gia' in esecuzione) oppure l'accoda ai trasferimenti in lista.

Il demone comunica lo stato del processo di copia all'applicazione primaria e aggiorna le path nel DB man mano che le copie vengono eseguite.

qualcuno ha esperienza con dbus?
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 30 Maggio 2013, 03:02:59
qualcuno ha esperienza con dbus?

Milio o fsurfing !


Nel frattempo... hai dato un'occhiata alla WIKI ?
* Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input (http://www.gambas-it.org/wiki/index.php?title=Usare_due_programmi_Gambas_contemporaneamente_mediante_Process,_lo_standard_Output_e_lo_standard_Input)
* Gestione dei processi mediante "Process"  (http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gestione_dei_processi_mediante_.22Process.22)
* Leggere e scrivere nello standard Output, nello standard Input e nello standard Error (http://www.gambas-it.org/wiki/index.php?title=Leggere_e_scrivere_nello_standard_Output,_nello_standard_Input_e_nello_standard_Error)
Titolo: Re: Lanciare processo in background
Inserito da: fsurfing - 30 Maggio 2013, 21:58:47
Citazione
qualcuno ha esperienza con dbus?

Milio o fsurfing !

direi solo milio :)


cmq, per il tuo problema credo che puoi benissimo realizzare un programma gambas che si occupa del caricamento e che utilizzi come output il terminale che andrai a leggere tramite un processo, come indicato nei link di vuott
Titolo: Re: Lanciare processo in background
Inserito da: milio - 30 Maggio 2013, 23:00:46
@fsurfing&vuott

Avevo fatto qualche esperimento, non sono di certo un esperto :)

@allegfede

Ti allego due progetti, schiavo e padrone :), che utilizzano dbus per comunicare tra di loro.
devi avviarli tutti e due, non importa la sequenza...
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 31 Maggio 2013, 00:12:23
@fsurfing&vuott

Avevo fatto qualche esperimento, non sono di certo un esperto
Eh, ti pare niente !



Ti allego due progetti, schiavo e padrone :), che utilizzano dbus per comunicare tra di loro.
Li ho scaricati e fatti "faticare: "molto interessante !  :coder:
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 31 Maggio 2013, 21:25:19
grrrraaaaazzzziiieeee

lunedi' li analizzo con calma.
sta settimana ho smantellato (letteralmente) la sala server .... mattone su mattone :D
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 04 Giugno 2013, 18:45:48
ok, dopo molta fatica (ovvero mi hanno rotto la cosiddette per miliardi di altri motivi ... lavorativi e no ...) ho dato un occhio al codice servo/padrone del buon Milio.

E' esattamente quello che mi serve :D

Se non ho capito male, un programma con l'istruzione:
  DBus.Session.Register(NomeClasse, "/PuntatoreNomeClasse")

espone sul sistema (linux) che il DBUS ha una "procedura" chiamata NomeClasse, raggiungibile al percorso dbus / PuntatoreNomeClasse

mentre:
  Object.Attach(NomeClasse, Me, "c")

segnala chi si debba occupare della gestione degli eventi.

cosi' con:
DBus["org.gambas.dbus." & nome dell'eseguibile a cui interfacciarsi & "]["/" & PuntatoreNomeClasse & "].eventi che puo' gestire

possiamo passare a lui la "patata bollente" .......

esperimenti in corso :D
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 04 Giugno 2013, 19:08:33

Se non ho capito male, un programma con l'istruzione:
  DBus.Session.Register(NomeClasse, "/PuntatoreNomeClasse")

espone sul sistema (linux) che il DBUS ha una "procedura" chiamata NomeClasse, raggiungibile al percorso dbus / PuntatoreNomeClasse

mentre:
  Object.Attach(NomeClasse, Me, "c")

segnala chi si debba occupare della gestione degli eventi.

cosi' con:
DBus["org.gambas.dbus." & nome dell'eseguibile a cui interfacciarsi & "]["/" & PuntatoreNomeClasse & "].eventi che puo' gestire

possiamo passare a lui la "patata bollente" .......

esperimenti in corso :D

Ovviamente è tempo perso se ti/vi chiedo anche di scrivere qualcosa al riguardo nella nostra WIKI ?!   :evil:
Titolo: Re: Lanciare processo in background
Inserito da: milio - 04 Giugno 2013, 20:29:51
Io mi prenoto per degli esempi pratici....   :P
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 04 Giugno 2013, 23:05:28
Io mi prenoto per degli esempi pratici....

...scansafatiche !  ;D
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 05 Giugno 2013, 19:45:15
appena c'ho qualcosa funzionante provo a spiegare in wiki :D
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 05 Giugno 2013, 23:08:08
appena c'ho qualcosa funzionante provo a spiegare in wiki :D

Muy bien ! Mi permetto, per accelerare le cose, di crearti semplicemente il capitolo specifico su DBus nella parte Guide della Comunità:
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#DBus

Il titolo della pagina specifica sul programma server e quello client che comunicano fra loro ovviamente glielo sceglierai tu.
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 06 Giugno 2013, 11:46:12
appena c'ho qualcosa funzionante provo a spiegare in wiki :D

Muy bien ! Mi permetto, per accelerare le cose, di crearti semplicemente il capitolo specifico su DBus nella parte Guide della Comunità:
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#DBus

Il titolo della pagina specifica sul programma server e quello client che comunicano fra loro ovviamente glielo sceglierai tu.

ok thanks
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 19 Giugno 2013, 23:41:46
ok ci sono riuscito, ma ho avuto diversi problemi a capire un paio di "sottigliezze" :D

in primis i programmi che si vogliono parlare devono registrarsi sul DBUS con il parametro "me", ma il "me" in pratica e' cio' che scrivete in "project->properties->title" .... mentre io pensavo che il nome del programma fosse quello con cui si creava il progetto ;-)

in secundis ho sbattuto un po' per capire che esponendo i metodi e le proprieta' di un programma si puo' accedervi da un programma esterno attraverso la gambas.org/nome_programma/metodo .....

domani se ci riesco scrivo due cose, ed ovviamente vorrei ringraziare Milio ... il suo master/slave e' stato decisivo ;-)
Titolo: Re: Lanciare processo in background
Inserito da: giob1642 - 21 Giugno 2013, 00:01:05
Ho sccaricato i due prog consiglati da Milio molto interessanti.
C'è la possibilità di provare il dbus su una sola macchina?
grazie
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 21 Giugno 2013, 18:21:16
si certo .. anzi non penso che funzionino in modo differente se non con pipe di memoria (quindi sulla stessa macchina).

Su macchine differenti bisogna usare i socket TCP o altra tecnologia di rete :D
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 24 Giugno 2013, 18:25:03
allora ho fatto un paio di modifiche al modulo di ingesting del mio progetto OTVA per fare test con DBUS.
Ho anche "hacckato" il server di milio per farmi da schiavo per la copia.

i miei risultati sono qui':
https://sourceforge.net/projects/otva/files/2013-06-25_dbuscopyserver_quite_complete/

i nomi dei file (per ora 3) da copiare e' hard coded :D e il pulsante calcola (che chiede al server di fare la copia dei 3 file ad un paio di secondi di distanza) e' un po' come un'orecchio sulla fronte.

ma il fatto che ora possa avere una "job list" di trasferimenti in sospeso mi entusiasma parecchio :D

ed ora il programma padrone (il modulo di ingesting) riceve anche un feedback dal servo sullo stato delle cose  8)
Titolo: Re: Lanciare processo in background
Inserito da: allegfede - 25 Giugno 2013, 21:33:01
Completed 80%
Titolo: Re: Lanciare processo in background
Inserito da: vuott - 25 Giugno 2013, 22:22:34
appena c'ho qualcosa funzionante provo a spiegare in wiki
Titolo: Re:Lanciare processo in background
Inserito da: allegfede - 07 Ottobre 2016, 11:08:17
Effetivamente m'ero scordato....
In realtà alla fine ho fatto al contrario. Monto i contenuti sulle varie macchine nel. Filesystem,  tutti nella stessa path.
Provo a riguardare il vecchio codice.