2
我需要通過接口訪問來自Django Web應用程序的數據。我想以非阻塞的方式來做到這一點(例如,使用libevent/gevent ...),但是周圍沒有很多示例實現(在python中),所以我想在這裏詢問任何示例/提示/經驗!帶有Django的非阻塞節儉服務器
請注意,這個問題是關於使用Thrift,而不是任何其他協議,我知道可能有比Django更好的框架,但使用它也是一個要求!
我需要通過接口訪問來自Django Web應用程序的數據。我想以非阻塞的方式來做到這一點(例如,使用libevent/gevent ...),但是周圍沒有很多示例實現(在python中),所以我想在這裏詢問任何示例/提示/經驗!帶有Django的非阻塞節儉服務器
請注意,這個問題是關於使用Thrift,而不是任何其他協議,我知道可能有比Django更好的框架,但使用它也是一個要求!
這可以通過在Django admin command內部實現節儉服務器來完成。查看您需要的文件結構的鏈接。在命令文件中,您可以撥打「thrift_server.py」,那麼您需要執行平時節儉服務器如下:
import sys
from django.core.management.base import BaseCommand
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
#import thrift files here
#now define the service handler according to your thrift method declaration
class ServiceHandler:
def __init__(self):
pass
#self.log = {}
def thriftMethodName(self, arg):
print "hello world!"
#here you have access to anything in the django framework
return True
class Command(BaseCommand):
def handle(self, *args, **kwargs):
handler = ServiceHandler()
processor = SaleService.Processor(handler)
transport = TSocket.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
# You could do one of these for a multithreaded server
#server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
#server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
self.stdout.write('Starting thrift server...')
server.serve()
self.stdout.write('done.')
注意,多線程服務器選項如上所述,雖然我沒有測試過這些呢。
然後,您可以運行的後臺程序如下:
(virtualenv) /django_project/ > python manage.py thrift_server
可以擴大對哪個部分是服務器,哪一部分是在您的情況的客戶端?我已經完成了java和python之間的Thrift服務,每個服務器和客戶端都充當服務器和客戶端。但我正在使用線程。 – jdi
Thrift服務器應該位於該行的Django端......我也看到了一些使用線程的Python示例,但我對使用gevent或類似庫的解決方案感到好奇! –