2010-06-08 3 views
6

L'applicazione desktop dovrebbe avviare il server web sul lancio e dovrebbe spegnerlo su una stretta.qual è il modo consigliato di esecuzione di un server Web incorporato all'interno di un'applicazione desktop (ad esempio server di WSGI con PyQt)

Supponendo che il desktop è l'unico client è consentito connettersi al server web, qual è il modo migliore per scrivere questo?

Sia il server web e il desktop eseguire in un ciclo il blocco dei loro propri. Quindi, dovrei usare thread o multiprocessing?

risposta

6

Utilizzare qualcosa come CherryPy o paste.httpserver. Puoi usare il server di wsgiref, e generalmente funziona bene a livello locale, ma se stai facendo Ajax, la natura single-threaded di wsgiref può causare risultati strani, o se fai una subrequest otterrai una condizione di competizione. Ma per la maggior parte dei casi andrà bene. Si potrebbe essere utile a voi di non avere un server filettato incorporato (sia CherryPy e paste.httpserver sono filettati), nel qual caso sarebbe utile wsgiref (tutte le richieste verranno eseguiti dallo stesso filo).

Si noti che se si utilizza CherryPy o paste.httpserver tutte le richieste si verificheranno automaticamente in sottofinestre (tali pacchetti fanno il thread spawning per te) e probabilmente non sarà possibile toccare direttamente il codice GUI dal proprio codice web (dal momento che di solito il codice GUI non viene gestito dai thread). Per ognuno di essi il codice del server si blocca, quindi è necessario generare un thread per avviare il server. Twisted può essere eseguito nel normale ciclo degli eventi della GUI, ma a meno che ciò sia importante aggiunge molta complessità.

Non utilizzare BaseHTTerver o SimpleHTTPServer, sono stupidi e complicati e in tutti i casi in cui è possibile utilizzare, è consigliabile utilizzare invece wsgiref. Ogni singolo caso, dato che wsgiref ha una API saggia (WSGI) mentre questi server hanno API stupide.

+0

Questo script (http://bitbucket.org/julian/hatta-mirror/src/tip/hatta_gtkicon.py) è molto vicino a quello che stavo cercando. Usa anche wsgiref. – btbytes

1

In Sauce RC, usiamo CherryPy. Dato che è puro Python, è molto semplice da incorporare (come sorgente su disco o in un file zip).

Problemi correlati