Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-04-2009, 14:44   #1
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
[Python] Guida socket

Sapete dove posso trovare una buona guida ai socket in python? Quella sul sito non mi sembra tanto completa...
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 15:10   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Con tutte le librerie che ha Python per internet, a te interessa veramente manipolare direttamente i socket?

A cosa ti servirebbero?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 15:13   #3
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
Quali altre possibilità ho?
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 15:34   #4
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Tantissime. Python ha una libreria molto ricca per accedere a internet.

Fai prima dirmi cosa ti serve (anche perché tra poco dovrei uscire ).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 15:40   #5
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
Dovrei semplicemente mettere in comunicazione più macchine e inviare e ricevere stringhe.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 15:46   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Se è solo per quello allora forse è meglio che usi i socket.

Nel link, verso la fine, trovi diversi esempi di semplici comunicazioni fra macchine.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2009, 21:42   #7
-Slash
Senior Member
 
L'Avatar di -Slash
 
Iscritto dal: Mar 2006
Messaggi: 2516
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Tantissime. Python ha una libreria molto ricca per accedere a internet.

Fai prima dirmi cosa ti serve (anche perché tra poco dovrei uscire ).
Approfitto della tua sapienza per chiederti: che libreria potrei usare in futuro per un semplice scambio di file? Tipo il computer A invia un file al computer B che sta "aspettando" il file, lo riceve e lo salva...

Credo anche in questo caso socket..

Ultima modifica di -Slash : 04-04-2009 alle 22:07.
-Slash è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 07:19   #8
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Lo penso anch'io, ma già per trasferire i file mi verrebbe in mente di utilizzare il protocollo FTP.

Comunque sono tante idee un po' eterogenee: è difficile dare una risposta che indirizzi verso una ben precisa direzione / libreria.

Ad esempio per quanto già scritto e soddisfare tutte le richieste si potrebbe pensare di mettere in piedi piccoli server HTTP, che in Python si tirano sù in pochi minuti. Ma potrebbe essere come sparare a una mosca con un cannone.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 12:07   #9
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
C'è il framework twisted che ha moltissimi strumenti per poter sfruttare il network.

Come libro invece consiglio Foundations of Python Network Programming. Trovi l'e-book con una semplice ricerca con BigG.
Quote:
Ad esempio per quanto già scritto e soddisfare tutte le richieste si potrebbe pensare di mettere in piedi piccoli server HTTP, che in Python si tirano sù in pochi minuti. Ma potrebbe essere come sparare a una mosca con un cannone.
Usando le HTTPlib?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 15:59   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Io ho usato BasicSocketServer o qualcosa di simile.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 16:12   #11
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Io ho usato BasicSocketServer o qualcosa di simile.
Mai sentito.
Sarei curioso di vedere questo server HHTP fatto in pochi minuti. Pensi di poter postare il codice quando hai un pò di tempo?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 18:17   #12
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non posso postare il codice, perché è roba aziendale. Alcuni spezzoni per rendere l'idea, sì:
Codice:
InternetUtils.RunHTTPServer(Host, Port, MyHTTPRequestHandler)
Intanto ti dico che mi sono creato delle classi e funzioni che aiutano. RunHTTPServer è una funzione a cui passi l'IP e la porta da cui ricevere le richieste, e la classe da utilizzare per generare le apposite istanze per servirle, e lancia subito il server.

Un esempio di handler per gestire le richieste è il seguente:
Codice:
class MyHTTPRequestHandler(InternetUtils.AdvancedHTTPRequestHandler):

  server_version = 'MyHTTP/0.01alpha'
  default_content_type = 'text/plain'
  log_file = r'D:\tmp\MyHTTP.log'


  def EncodeContent(self, message):

    return message


  def _list(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):

    if Globals is not None:
      Datas = globals()
    elif locals is not None:
      Datas = locals()
    elif Self is not None:
      Datas = self.__dict__
    elif Inspect is not None:
      Datas = dir(self)
    else:
      Key, Datas = '', {}

    return self.send_message(str(sorted(Datas)))


  def _get(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):

    if Globals:
      Key, Datas = Globals, globals()
    elif Locals:
      Key, Datas = Locals, locals()
    elif Self:
      Key, Datas = Self, self.__dict__
    else:
      Key, Datas = '', {}

    return self.send_message(str(Datas[Key]) if Key in Datas else 'ERROR! Data not found!!!')
AdvancedHTTPRequestHandler è la classe madre che ho creato per gestire parecchi aspetti delle richieste in modo automatico. Praticamente fa tutto lei.

Io devo definire soltanto le seguenti cose:
la versione del server;
il MIMEType del contenuto che eroga (ovviamente per singole precise richieste si può cambiare);
Un file di log in cui riportare tutte le richieste arrivate (tipo il log di apache; ovviamente è opzionale).

Il metodo EncodeContent esegue eventuali codifiche. In questo caso i dati restituiti sono testo "nudo e crudo", per cui semplicemente restituisce ciò che riceve.

Fatto questo è sufficiente definire dei metodi che verranno automaticamente chiamati quando arriva una richiesta che li reclama. Qui ne sono definiti due, _list e _get.

Il nome sembra strano con quegli underscore all'inizio, ma ciò è necessario perché quando la classe madre effettua il parsing dell'URI che è arrivata, sostuisce tutti gli / in _ in modo da poter mappare correttamente l'URI a un preciso metodo della classe.

Quindi se tu richiami il server con questa URI:
http://192.168.0.1/list?Globals=Yes

verrà richiamato il metodo _list col parametro Globals valorizzato con la stringa 'Yes'.

Qualunque richiesta per cui non esiste un metodo mappato viene dirottata nel metodo standard _bad, che provvede a visualizzare un messaggio d'errore standard.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2009, 18:52   #13
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Non posso postare il codice, perché è roba aziendale. Alcuni spezzoni per rendere l'idea, sì:
Codice:
InternetUtils.RunHTTPServer(Host, Port, MyHTTPRequestHandler)
Ovviamente non volevo il codice aziendale, ma un esempio

Quote:
Intanto ti dico che mi sono creato delle classi e funzioni che aiutano.
Come fai sempre del resto

Quote:
RunHTTPServer è una funzione a cui passi l'IP e la porta da cui ricevere le richieste, e la classe da utilizzare per generare le apposite istanze per servirle, e lancia subito il server.
Interessante.

Quote:
Un esempio di handler per gestire le richieste è il seguente:
Codice:
class MyHTTPRequestHandler(InternetUtils.AdvancedHTTPRequestHandler):

  server_version = 'MyHTTP/0.01alpha'
  default_content_type = 'text/plain'
  log_file = r'D:\tmp\MyHTTP.log'


  def EncodeContent(self, message):

    return message


  def _list(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):

    if Globals is not None:
      Datas = globals()
    elif locals is not None:
      Datas = locals()
    elif Self is not None:
      Datas = self.__dict__
    elif Inspect is not None:
      Datas = dir(self) #qua cosa mostri?
    else:
      Key, Datas = '', {}

    return self.send_message(str(sorted(Datas))) #dove è send_message? In qualche altra parte di codice?


  def _get(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):

    if Globals:
      Key, Datas = Globals, globals() #questa funzione cosa fa?
    elif Locals:
      Key, Datas = Locals, locals() #come sopra
    elif Self:
      Key, Datas = Self, self.__dict__ #dove lo prende questo dizionario?
    else:
      Key, Datas = '', {}

    return self.send_message(str(Datas[Key]) if Key in Datas else 'ERROR! Data not found!!!')
AdvancedHTTPRequestHandler è la classe madre che ho creato per gestire parecchi aspetti delle richieste in modo automatico. Praticamente fa tutto lei.
Ti segno in grassetto quello che non mi è chiaro e aggiungo commento al codice. Comunque stai usando BasicSocketServer in questo codice?
In pratica aggiungi funzionalità alla classe dalla quale erediti.

Quote:
Il metodo EncodeContent esegue eventuali codifiche. In questo caso i dati restituiti sono testo "nudo e crudo", per cui semplicemente restituisce ciò che riceve.
Non fai un controllo sull'input?

Quote:
Fatto questo è sufficiente definire dei metodi che verranno automaticamente chiamati quando arriva una richiesta che li reclama. Qui ne sono definiti due, _list e _get.

Il nome sembra strano con quegli underscore all'inizio, ma ciò è necessario perché quando la classe madre effettua il parsing dell'URI che è arrivata, sostuisce tutti gli / in _ in modo da poter mappare correttamente l'URI a un preciso metodo della classe.

Quindi se tu richiami il server con questa URI:
http://192.168.0.1/list?Globals=Yes

verrà richiamato il metodo _list col parametro Globals valorizzato con la stringa 'Yes'.

Qualunque richiesta per cui non esiste un metodo mappato viene dirottata nel metodo standard _bad, che provvede a visualizzare un messaggio d'errore standard.
Io sto leggendo adesso quel libro riguardo la programmazione di rete con Python, ma mi chiedo: questo server HTTP cosa contiene? Cioè, come faccio io ad inserire ad esempio un sito su questo server e a renderlo raggiungibile? E richiama in automatico la tua classe quando inseriso un URL nel browser?

P.S: in quel link di esempio che hai scritto si è vista la valorizzazione del parametro Global, ma gli altri parametri in un URL come si potrebbero presentare? Con il semplice nome della variabile come Globals = Yes in questo caso?

P.S2: ma quel _ prima del nome di un metodo o variabile non vuol dire che la rende privata?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.

Ultima modifica di ~FullSyst3m~ : 05-04-2009 alle 19:07.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2009, 13:05   #14
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da ~FullSyst3m~ Guarda i messaggi
Ti segno in grassetto quello che non mi è chiaro e aggiungo commento al codice.
Di seguito tutte le tue risposte alle domande contenute nel sorgente.

Datas = dir(self) #qua cosa mostri?
Faccio introspezione sull'oggetto stesso, e recupero tutti i membri (variabili e metodi) esso contenuti.

return self.send_message(str(sorted(Datas))) #dove è send_message? In qualche altra parte di codice?
Si trova nella classe madre che gestisce le richieste HTTP, AdvancedHTTPRequestHandler.

Key, Datas = Globals, globals() #questa funzione cosa fa?
globals() ritorna un dizionario con l'elenco di tutte le variabili globali.

Key, Datas = Locals, locals() #come sopra
globals() ritorna un dizionario con l'elenco di tutte le variabili locali.

Key, Datas = Self, self.__dict__ #dove lo prende questo dizionario?
Ogni oggetto Python "non banale / standard" ha al suo interno un dizionario in cui sono riportate le variabili e i metodi d'istanza.

In pratica tutte queste informazioni mi servono per controllare dall'esterno lo stato del server.
Quote:
Comunque stai usando BasicSocketServer in questo codice?
No, sto usando SocketServer.ThreadingTCPServer per il server TCP, e BaseHTTPServer.BaseHTTPRequestHandler per gestire le richeste HTTP.
Quote:
In pratica aggiungi funzionalità alla classe dalla quale erediti.
Sì.
Quote:
Non fai un controllo sull'input?
Non ne ho bisogno, ma potrei farlo.
Quote:
Io sto leggendo adesso quel libro riguardo la programmazione di rete con Python, ma mi chiedo: questo server HTTP cosa contiene? Cioè, come faccio io ad inserire ad esempio un sito su questo server e a renderlo raggiungibile?
Semplice: ti basta lanciare quello script e il server è già pronto e funzionante.

Supponendo che il codice l'abbia salvato su un file che si chiama server.py, basta
Codice:
python server.py
e ho già il server attivo e pronto a servire le richieste che arriveranno.
Quote:
E richiama in automatico la tua classe quando inseriso un URL nel browser?
Sì.
Quote:
P.S: in quel link di esempio che hai scritto si è vista la valorizzazione del parametro Global, ma gli altri parametri in un URL come si potrebbero presentare? Con il semplice nome della variabile come Globals = Yes in questo caso?
Sì, e se ci sono più parametri è sufficiente separarli con la e commerciale (&):
http://192.168.0.1/list?Globals=Yes&Locals=Yes
Quote:
P.S2: ma quel _ prima del nome di un metodo o variabile non vuol dire che la rende privata?
No. Rappresenta la root dell'URI. /get -> _get
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 06-04-2009, 13:25   #15
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Di seguito tutte le tue risposte alle domande contenute nel sorgente.

Datas = dir(self) #qua cosa mostri?
Faccio introspezione sull'oggetto stesso, e recupero tutti i membri (variabili e metodi) esso contenuti.

return self.send_message(str(sorted(Datas))) #dove è send_message? In qualche altra parte di codice?
Si trova nella classe madre che gestisce le richieste HTTP, AdvancedHTTPRequestHandler.

Key, Datas = Globals, globals() #questa funzione cosa fa?
globals() ritorna un dizionario con l'elenco di tutte le variabili globali.

Key, Datas = Locals, locals() #come sopra
globals() ritorna un dizionario con l'elenco di tutte le variabili locali.

Key, Datas = Self, self.__dict__ #dove lo prende questo dizionario?
Ogni oggetto Python "non banale / standard" ha al suo interno un dizionario in cui sono riportate le variabili e i metodi d'istanza.

In pratica tutte queste informazioni mi servono per controllare dall'esterno lo stato del server.

No, sto usando SocketServer.ThreadingTCPServer per il server TCP, e BaseHTTPServer.BaseHTTPRequestHandler per gestire le richeste HTTP.

Sì.

Non ne ho bisogno, ma potrei farlo.

Semplice: ti basta lanciare quello script e il server è già pronto e funzionante.

Supponendo che il codice l'abbia salvato su un file che si chiama server.py, basta
Codice:
python server.py
e ho già il server attivo e pronto a servire le richieste che arriveranno.

Sì.

Sì, e se ci sono più parametri è sufficiente separarli con la e commerciale (&):
http://192.168.0.1/list?Globals=Yes&Locals=Yes

No. Rappresenta la root dell'URI. /get -> _get
In teoria è chiaro, tranne la prima parte che non l'ho inquadrata bene non avendo mai fatto prove.

Riguardo il _ serve anche a rendere privata una funzione o variabile. O no?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
QNAP lancia i nuovi NAS TS-262A e TS-462...
E4 Computer Engineering e EuroHPC JU uni...
World di Sam Altman raccoglie 52,5 milio...
AMD prepara il futuro delle CPU Ryzen: Z...
Intel fa marcia indietro: torna la tecno...
Honor ROBOT PHONE ha una data d'uscita: ...
TSMC accelera sulla produzione a 2 nm: u...
Diritto alla riparazione, dal 31 luglio ...
WhatsApp introduce il conteggio privato ...
Lenovo IdeaPad Slim 3 a 499,90€: ecco pe...
Benzina e diesel ai massimi: il Governo ...
ECOVACS DEEBOT T30e OMNI a 299€ e T50 PR...
Gli X-Men sono assenti in Marvel's Wolve...
I primi occhiali intelligenti di Apple p...
Apple TV svela il primo trailer ufficial...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v