次のコード(ここから取ら:https://bitbucket.org/denis/gevent/src/6c710e8ae58b/examples/wsgiserver_ssl.pyは)非常に速いgreenletパワードのWSGI Webサーバを実装します。Gevent Pywsgi Server - マルチプロセッシング?
#!/usr/bin/python
"""Secure WSGI server example based on gevent.pywsgi"""
from gevent import pywsgi
def hello_world(env, start_response):
if env['PATH_INFO'] == '/':
start_response('200 OK', [('Content-Type', 'text/html')])
return ["<b>hello world</b>"]
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
return ['<h1>Not Found</h1>']
print 'Serving on https://127.0.0.1:8443'
server = pywsgi.WSGIServer(('0.0.0.0', 8443), hello_world, keyfile='server.key', certfile='server.crt')
# to start the server asynchronously, call server.start()
# we use blocking serve_forever() here because we have no other jobs
server.serve_forever()
しかし、これは唯一つのコア上で実行されます。複数のプロセスを利用するには、これをどのように変更しますか?ガンコーンを含む答えを探していない、もっと簡単なものを探している。ここで
ヒント
はgeventとマルチプロセッシングを使用してコードサンプルですが、私はまだ(https://gist.github.com/1169975から取られた)WSGIでこの作業を行う方法を見つけ出すことはできません。
だから、import sys
from gevent import server
from gevent.baseserver import _tcp_listener
from gevent.monkey import patch_all; patch_all()
from multiprocessing import Process, current_process, cpu_count
def note(format, *args):
sys.stderr.write('[%s]\t%s\n' % (current_process().name, format%args))
def echo(socket, address):
print 'New connection from %s:%s' % address
fileobj = socket.makefile()
fileobj.write('Welcome to the echo server! Type quit to exit.\r\n')
fileobj.write('In %s\r\n' % current_process().name)
fileobj.flush()
while True:
line = fileobj.readline()
if not line:
print "client disconnected"
break
if line.strip().lower() == 'quit':
print "client quit"
break
fileobj.write(current_process().name + '\t' + line)
fileobj.flush()
print "echoed", repr(line)
listener = _tcp_listener(('127.0.0.1', 8001))
def serve_forever(listener):
note('starting server')
server.StreamServer(listener, echo).serve_forever()
number_of_processes = 5
print 'Starting %s processes' % number_of_processes
for i in range(number_of_processes):
Process(target=serve_forever, args=(listener,)).start()
serve_forever(listener)
しかし、あなたは6つのポートが1つよりも速いことを理解しなければなりません。したがって、6つのポートでnginxのバランスをとる6つのプロセスがこれより優れています。 –
これを行うと、nginix上でポートのボトルネックが発生しています。 – pokstad
これは本当ですが、とにかくあなたはあなたのために(なぜセキュリティ上の理由で)あなたのために逆プロキシを使用していますので、上流も使用しないでください?ベーターは1対1から多対1を使用する。 –