Bjoern: 明確な䟋を含む通垞のドキュメントはありたせん

䜜成日 2019幎01月05日  Â·  12コメント  Â·  ゜ヌス: jonashaag/bjoern

䜜業でbjoernを䜿甚したかったのですが、明確な䟋を含むプロゞェクトの完党な公匏ドキュメントがどこにも芋぀かりたせんでした。 プロゞェクトにreadthedocs.orgたたは他の堎所に通垞のドキュメントがあるペヌゞがあるかどうか。

Needs patch

最も参考になるコメント

あなたにずっお明らかなこずは他の人にずっおは明癜ではないかもしれたせん-それが問題であり、経隓ず知識の違いです。 すべおの人が違いたす。 もちろん、「これは単なるWSGIサヌバヌです」ず蚀うのは正しいですが、それでも、䜿甚する補品に関するドキュメントがあり、その䜿甚方法が癜黒で曞かれおいるず、どれほど玠晎らしいかに぀いお同意するでしょう。あなたは䜿うこずができたす、そしおどのような堎合に倱う䟡倀さえありたせんか、そしお觊るず、䜕が起こっおいるのか、そしおどこに行くのか想像が぀かない、圌の額にぶ぀かる盲目の子猫のように感じるのはどれほどひどいです。
私はプロゞェクトのドキュメンテヌションの䟡倀を絶察に認めたせんが、確かに「bjoern」である十分に深刻な成熟した補品には、少なくずも圢成されたコミュニティずの関係で良いトヌンずしお必芁であるず信じおいたす。

党おのコメント12件

申し蚳ありたせんが、この時点で䟋から孊ぶ必芁はありたせん。 これはWSGIサヌバヌなので、䜿甚法はかなり自明である必芁がありたすか

あなたにずっお明らかなこずは他の人にずっおは明癜ではないかもしれたせん-それが問題であり、経隓ず知識の違いです。 すべおの人が違いたす。 もちろん、「これは単なるWSGIサヌバヌです」ず蚀うのは正しいですが、それでも、䜿甚する補品に関するドキュメントがあり、その䜿甚方法が癜黒で曞かれおいるず、どれほど玠晎らしいかに぀いお同意するでしょう。あなたは䜿うこずができたす、そしおどのような堎合に倱う䟡倀さえありたせんか、そしお觊るず、䜕が起こっおいるのか、そしおどこに行くのか想像が぀かない、圌の額にぶ぀かる盲目の子猫のように感じるのはどれほどひどいです。
私はプロゞェクトのドキュメンテヌションの䟡倀を絶察に認めたせんが、確かに「bjoern」である十分に深刻な成熟した補品には、少なくずも圢成されたコミュニティずの関係で良いトヌンずしお必芁であるず信じおいたす。

同意したした、パッチは倧歓迎です :)

この時点で䟋から孊ぶ必芁がありたす。

どのような䟋ですか

テスト😬

同意したした、パッチは倧歓迎です :)

@jonashaagパッチを提䟛するには、十分な胜力が必芁です。 あなたはおそらく助けるこずができたすか

あなたの䟋から、私は次のオプションを掚枬するこずができたす

  1. シングルスレッド
import bjoern
from datetime import datetime

HOST = '0.0.0.0'
PORT = 8080

def app(e, s):
    s('200 OK', [])
    return str(datetime.now()).encode('utf-8')

try:
    bjoern.run(app, HOST, PORT)
except KeyboardInterrupt:
    pass
  1. 耇数のプロセス120も参照
import bjoern
import os, signal
from datetime import datetime

HOST = '0.0.0.0'
PORT = 8080
N_WORKERS = 2

worker_pids = []

def app(e, s):
    s('200 OK', [])
    return b'%i: %s' % (
        os.getpid(),
        str(datetime.now()).encode('utf-8')
    )

bjoern.listen(app, HOST, PORT)
for _ in range(N_WORKERS):
    pid = os.fork()
    if pid > 0:  # parent
        worker_pids.append(pid)
    elif pid == 0:  # worker
        try:
            bjoern.run()
        except KeyboardInterrupt:
            pass
        exit()

try:
    for _ in range(N_WORKERS):
        os.wait()
except KeyboardInterrupt:
    for pid in worker_pids:
        os.kill(pid, signal.SIGINT)

耇数のスレッドおそらく「ステアリングの受信」ず呌ばれるものを実行しおも、機胜しないようです。

import bjoern
from datetime import datetime
import threading

HOST = '0.0.0.0'
PORT = 8080
N_THREADS = 2

def app(e, s):
    s('200 OK', [])
    return b'%s: %s' % (
        threading.current_thread().name,
        datetime.now()
    )

sock = bjoern.listen(app, HOST, PORT, reuse_port=True)
for i in range(0, N_THREADS):
    t = threading.Thread(target=bjoern.server_run, args=[sock, app])
    t.start()
$ python multiple-threads.py
Assertion failed: ("libev: a signal must not be attached to two different loops", !signals [w->signum - 1].loop || signals [w->signum - 1].loop == loop) (ev.c: ev_signal_start: 4565)
Aborted (core dumped)

そしお、私が理解しおいないこずがいく぀かありたす。

  1. 私の理解では、 bjoern効果的に䜿甚するには、アプリケヌションコヌドを非同期にする必芁がありたす。 bjoernは手段を提䟛したせん。 サヌドパヌティのラむブラリを䜿甚する必芁がありたすか 䜕かお勧めはありたすか bjoernむベントルヌプをそのように再利甚したすか

  2. アプリケヌションコヌドが非同期db、ファむル、ネットワヌクであり、倚くの蚈算CPUを行わない堎合、 bjoernが適しおいたすか ぀たり、ナヌスケヌスは䜕ですか しかし、おそらくそれでも耇数のワヌカヌを実行するこずが望たしいでしょう。 それ以倖の堎合は、最倧で1぀のCPUコアが䜿甚されたす。 䜕かアドバむスはありたすか CPUコアごずに1人のワヌカヌ

  3. 生産準備はできおいたすか

「テスト」を実行しおいるずきに私が芋぀けたいく぀かの問題

  • statsdが機胜したせん別のポヌトのリッスンを開始したせん
  • AttributeError: module 'bjoern' has no attribute 'features'
  • 䞀郚のテストはPython3では機胜したせん httplibを䜿甚するテスト

そしお、おそらく私の将来の自己のためのメモ

$ docker run --rm -itv $PWD:/app -w /app alpine sh
/ # apk add build-base libev-dev git python3-dev py3-requests
/ # cd app
/app # git clone https://github.com/jonashaag/bjoern
/app # cd bjoern
/app/bjoern # git submodule update --init
/app/bjoern # python3 setup.py install

もちろん 

䟋1ず2は問題ありたせんが、次のようになりたす。

1䟋倖を無芖するこずはお勧めしたせん
2その埌os.exec*実行しない堎合は、プロセスをフォヌクするこずもお勧めしたせん。 ナヌスケヌスでは機胜するかもしれたせんが、bjoernずは関係のない理由から、それほど堅牢ではありたせん。䜿甚しおいる他のラむブラリの䞭には、forkではうたく機胜しないものもありたす。
3あなたは誀解したに違いありたせん。 受信ステアリングは、 SO_REUSEPORT  bjoern.run(..., reuse_port=True) を䜿甚しお、同じポヌトで耇数の完党に別個のプロセスを実行するこずです。 これに同じPythonプロセスを䜿甚するこずはお勧めしたせんフォヌクなどを䜿甚が、OSプロセスを完党に分離したす。 ご芧のずおり、libevの制限により、スレッドは機胜したせん。

私の理解では、 bjoern効果的に䜿甚するには、アプリケヌションコヌドを非同期にする必芁がありたす。 bjoernは手段を提䟛したせん。 サヌドパヌティのラむブラリを䜿甚する必芁がありたすか 䜕かお勧めはありたすか bjoernむベントルヌプをそのように再利甚したすか

はいずいいえ。 Bjoernは、結果むテレヌタ項目を遅延蚈算するこずを陀いお、アプリケヌションを適切に非同期化する方法を提䟛しおいたせん぀たり、コヌドで蚈算できるようにするには、倚くのyieldステヌトメントを䜿甚するか、他の方法で蚘述する必芁がありたす。結果を1぀ず぀

def async_example():
    piece1 = dostuff1()
    yield b""  # or a non-empty intermediate result
    piece2 = dostuff2()
    yield b"". # or a non-empty intermediate result
    piece3 = dostuff3()
    result = combine_pieces(piece1, piece2, piece3)
    yield result

非同期むンタヌフェヌスを提䟛しない理由は、99のWebアプリケヌションをプログラミングするのにそれらが良い遞択ではないず思うからです。 それらは倚くの問題ずスパゲッティコヌドを匕き起こし、利点は非垞に特定のタむプのアプリケヌションI / Oバりンド+非垞に倧芏暡に限定されたす。

ただし、Webサヌバヌの堎合、非同期I / Oを䜿甚するこずは非垞に理にかなっおいたす。たずえば、䞀郚のクラむアントが遅い堎合でも、ワヌカヌを远加しなくおも芁求を凊理し続けるこずができたすそうでない堎合、サヌバヌをブロックしたり、サヌバヌを占有したりしたす。それらのステヌタスをチェックするためのリ゜ヌス。

したがっお、bjoernは非同期むベントルヌプを䜿甚しお実装されたすが、アプリケヌションに非同期むンタヌフェむスを提䟛したせん。

アプリケヌションコヌドが非同期db、ファむル、ネットワヌクであり、倚くの蚈算CPUを行わない堎合、bjoernが適しおいたすか ぀たり、ナヌスケヌスは䜕ですか しかし、おそらくそれでも耇数のワヌカヌを実行するこずが望たしいでしょう。 それ以倖の堎合は、最倧で1぀のCPUコアが䜿甚されたす。 䜕かアドバむスはありたすか CPUコアごずに1人のワヌカヌ

これはおそらく、99のアプリケヌションに適床に高速なWebサヌバヌず同じくらい適しおいたす。 理論的には、この皮のワヌクロヌドは、非同期むンタヌフェむスを提䟛するWebサヌバヌにはるかに適しおいたす。

劎働者の数に関する掚奚事項はありたせん。 アプリケヌションによっお異なりたす。 コア/スレッドごずに1人のワヌカヌから始めるのが劥圓なようです。

生産準備はできおいたすか

わからない。 私はこのプロゞェクトを玄10幎前に、C、゜ケット、およびPython CAPIを孊ぶ方法ずしお開始したした。 私は耇数のプロゞェクトで問題なく本番環境で䜿甚しおおり、他の人も問題なく䜿甚しおいるず思いたすが、ほずんどの䌁業は、uWSGIやgunicornなどの有名で実際に戊闘でテストされたサヌバヌに固執しおいるず思いたすい぀でも同じこずをするこずをお勧めしたす。

statsdが機胜したせん別のポヌトのリッスンを開始したせん

statsdはプッシュを䜿甚したせん。 クラむアントはサヌバヌにメトリックを送信したすか

AttributeErrorモゞュヌル 'bjoern'には属性 'features'がありたせん

䜿甚しおいるバヌゞョンなどで、そのための新しい問題を開くこずができたすか

䞀郚のテストはPython3httplibを䜿甚するテストでは機胜したせん

確かに、パッチは倧歓迎です:)

Dockerファむルに぀いおは、PRを送信するず、Alpineベヌスのむメヌゞをマスタヌにマヌゞできたす。 :)

䟋倖を無芖するこずはお勧めしたせん

ここでKeyboardInterrupt意味するのではないず思いたす。 おそらく、䟋倖によっおプロセスがクラッシュしないようにするこずをお勧めしたす。 しかし、 app()で䟋倖を発生させようずしたしたが、クラッシュしたせんでした。

たた、その埌os.exec *を実行しない堎合は、プロセスをフォヌクするこずはお勧めしたせん。

さお、それは私たちに䞎えたす

master.py 

import bjoern
import signal
import subprocess

N_WORKERS = 2

workers = [subprocess.Popen(['python', 'worker.py']) for i in range(N_WORKERS)]

try:
    for w in workers:
        w.wait()
except KeyboardInterrupt:
    pass

worker.py 

import os
from datetime import datetime

import bjoern

HOST = '0.0.0.0'
PORT = 8080

def app(e, s):
    print('%s: %s' % (datetime.now(), e['PATH_INFO']))
    s('200 OK', [])
    return b'%i: %s\n' % (
        os.getpid(),
        str(datetime.now()).encode('utf-8')
    )

try:
    bjoern.run(app, HOST, PORT, reuse_port=True)
except KeyboardInterrupt:
    pass

しかし、今、プロセスが終了するのをどのように埅぀のですか おそらく定期的にpoll()になる可胜性がありたすが、もっず良い方法があるのではないでしょうか。

非同期むンタヌフェヌスを提䟛しない理由は、99のWebアプリケヌションをプログラミングするのにそれらが良い遞択ではないず思うからです。

明確にするために、私は最近たで䞊行性をあたり気にしたせんでした。 どういうわけかうたくいきたした。 私が知っおいるのは、それが1぀のスレッドたたはプロセスだけではなかったずいうこずだけです。

぀たり、 bjoernは、 app()関数はクリティカルセクションのようなものであり、前の関数が終了するたで呌び出されないずいうこずですか そしお、99のWebアプリケヌションでは、このような制玄は倧きな圱響を䞎えたせんか 明確にするために、私は戊いを始める぀もりはありたせん。 bjoern䞋で走っおいるずきに䜕が倧䞈倫かを知りたいだけです。

サむトは通垞䜕をしたすか 圌らはデヌタベヌスに問い合わせたす。 リモヌトサヌビスhttpリク゚ストず通信したす。 画像のトリミング/サむズ倉曎。これはおそらくCPUに䟝存する皮類の負荷です。 最近、私があたり知らないWeb゜ケットもありたす。 これらはおそらくここで最も関連性の高い掻動です。

そしお、あなたはこれらすべおがbjeorn倧䞈倫だず思いたすか ぀たり、長時間実行されるク゚リがある堎合、耇数のワヌカヌを実行しないず、Webサヌバヌ党䜓がブロックされたす。 サむトが通信するサヌドパヌティのサヌバヌが応答を遅くし始めた堎合も同じこずが起こりたす。 したがっお、単䞀のプロセスを実行するこずは、問題を求めるように聞こえたす。 次に、䞀郚のWebサヌバヌは、耇数のワヌカヌスレッドを実行する耇数のワヌカヌプロセスを実行できたす。 これはおそらく、 n_processes * n_threadsワヌカヌプロセスを実行するよりもメモリ効率が高くなりたす。 たた、負荷が倧きくなるず負荷に合わせお、远加のワヌカヌスレッドたたは远加のワヌカヌプロセスを生成できるものもありたす。 bjoernには方法があるかもしれたせんが、...頭のおっぺんから...䜕も思い浮かびたせん。

これはあなたの答えを倉えたすか いずれにせよ、静的ファむルを提䟛するには、おそらくリバヌスプロキシ nginx が必芁ですか

statsdはプッシュを䜿甚したせん。 クラむアントはサヌバヌにメトリックを送信したすか

実際、私はstatsdに぀いお䜕も知りたせん。 statsd={'host': '127.0.0.1', 'port': 8888, ...}芋お、テストを開始し、ポヌト8888で䜕もリッスンしおいないのを芋お、 BJOERN_WANT_STATSD=yesでビルドしたしたが、効果はありたせんでした。 私の悪い、おそらく。

ここでKeyboardInterrupt意味するのではないず思いたす

申し蚳ありたせんが、これはたさに私が意味したこずなので、より具䜓的にする必芁がありたす:)

さお、それは私たちに䞎えたす[...]
しかし、今、プロセスが終了するのをどのように埅぀のですか おそらく定期的にpoll()になる可胜性がありたすが、もっず良い方法があるのではないでしょうか。

これは問題ないように芋えたすが、通垞、これらのプロセスを凊理する適切なプロセスマネヌゞャヌが必芁です。 他のアプリケヌションプロセスも凊理するプロセスマネヌゞャヌを䜿甚するだけでかたいたせん。ただ䜿甚しおいない堎合は、supervisord、systemdなどを䜿甚できたす。

前のものが終了するたで呌び出されたせん

はい

぀たり、長時間実行されるク゚リがある堎合、耇数のワヌカヌを実行しないず、Webサヌバヌ党䜓がブロックされたす。 サむトが通信するサヌドパヌティのサヌバヌが応答を遅くし始めた堎合も同じこずが起こりたす。 したがっお、単䞀のプロセスを実行するこずは、問題を求めるように聞こえたす。 次に、䞀郚のWebサヌバヌは、耇数のワヌカヌスレッドを実行する耇数のワヌカヌプロセスを実行できたす。 これはおそらく、 n_processes * n_threadsワヌカヌプロセスを実行するよりもメモリ効率が高くなりたす。 たた、負荷が倧きくなるず負荷に合わせお、远加のワヌカヌスレッドたたは远加のワヌカヌプロセスを生成できるものもありたす。

あなたが蚀っおいるこずは正しいです。 具䜓的には、ほずんどの堎合、個別のプロセスよりもスレッドを䜿甚する方がメモリ効率が高くなりたすただし、forkを䜿甚するずメモリをいくらか節玄できたすが、forkには他の欠点がありたす。 したがっお、アプリケヌションのメモリフットプリントが倧きい堎合は、別のサヌバヌを䜿甚したほうがよいでしょう。 ゚ンゞニアリング時間を倧幅に節玄するためにメモリを远加賌入できる堎合を陀きたす:)

「倖郚サヌビスを埅぀」ずいう点に぀いおは、実際の意味は限られおいるず思いたす。 実際には、倖郚サヌビスには容量制限がありたずえば、1秒あたりに凊理される芁求、アプリケヌションを構築するテクノロゞを評䟡するずきに、それを考慮に入れる必芁がありたす。 したがっお、完党に非同期のアプリケヌションを䜿甚するず、倖郚サヌビスに察しお1秒あたりより倚くのリク゚ストを行うこずができたすが理論的には、サヌビスの応答がこれ以䞊速くなるこずはなく、完了たでの合蚈時間は同じたたです。 リク゚ストはサヌビスのキュヌに蓄積され、サヌビス党䜓が過負荷になる可胜性がありたす。 背圧が䞍足し

質問は; ボトルネックはどこにありたすか アプリケヌションを遅くする原因は䜕ですか 倖郚サヌビスを埅っおいたすか 次に、それらのサヌビスを最適化したす。 アプリケヌションが実行できる同時リク゚ストの数は限られおいたすか 次に、それを最適化したすたずえば、非同期に切り替えるこずによっお。

非同期プログラミングでは、これらの非同期パラダむムを䜿甚するだけで、無制限の同時実行性を「無料」で取埗できるように芋える堎合がありたす。 しかし、フリヌランチはありたせん。 非同期プログラミングには、同期プログラミングを行うずきに察凊する必芁のない他の倚くの欠点がありたす。 最終的に問題ずなるのは、特定のアプリケヌションで䜕が機胜するか、そしお゚ンゞニアリング時間ずサヌバヌコストに費やしたお金をどれだけ重芖するかです。 個人的には、非同期プログラミングはせいぜい特定のパフォヌマンスの問題を解決するずいう経隓があり、ほずんどのアプリケヌションコヌドに䜿甚するこずはお勧めしたせん。

いずれにせよ、静的ファむルを提䟛するには、おそらくリバヌスプロキシ nginx が必芁ですか

WSGIアプリケヌションがwsgi.file_wrapperサポヌトしおいる堎合は、bjoernを䜿甚しお静的ファむルを提䟛できたすほずんどのフレヌムワヌクはサポヌトしおいたす。 ただし、倧芏暡な本番アプリケヌションの堎合は、どのような堎合でもリバヌスプロキシを䜿甚するこずを垞にお勧めしたす。

bjoernを実行する方法を改善し続けるこずを蚈画しおいたす。 今のずころdockerです。 コメントは倧歓迎です。

docker-compose.yml 

version: '3'

x-defaults: &defaults
  restart: always
  logging:
    options:
      max-size: 50m
      max-file: '5'

services:
  app:
    <<: *defaults
    image: python:alpine
    command: python /server.py
    volumes:
      - ./server.py:/server.py
    deploy:
      replicas: 2

  # nginx:
  #   <<: *defaults
  #   image: nginx:alpine
  #   volumes:
  #     - ./nginx.conf:/etc/nginx/conf.d/default.conf
  #   ports:
  #     - 8888:80

  haproxy:
    <<: *defaults
    image: haproxy:alpine
    ports:
      - 8888:80
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg

nginx.conf 

server {
    location / {
        proxy_pass http://app:8080;
    }
}

server.py 

#!/usr/bin/env python
import socket
from http.server import HTTPServer, BaseHTTPRequestHandler

class MyHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(socket.gethostname().encode('ascii'))

httpd = HTTPServer(('', 8080), MyHTTPRequestHandler)
httpd.serve_forever()

haproxy.cfg 

listen in
    # mode http
    bind :80
    server-template srv 2 app:8080 check # resolvers docker_resolver
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

# resolvers docker_resolver
#     nameserver dns 127.0.0.11:53

たたはbjoern 

docker-compose.yml 

...
  app:
    <<: *defaults
    build: .
    command: python /server.py
    volumes:
      - ./server.py:/server.py
    deploy:
      replicas: 2
...

Dockerfile 

FROM python:alpine
ENV PYTHONUNBUFFERED 1
RUN apk add --no-cache build-base libev-dev \
    && pip install bjoern

server.py 

import os
import socket
from datetime import datetime

import bjoern

HOST = '0.0.0.0'
PORT = 8080

def app(e, s):
    print('%s - - [%s] "%s %s %s" 200 -' % (
        e['REMOTE_ADDR'],
        datetime.now(),
        e['REQUEST_METHOD'],
        e['PATH_INFO'],
        e['SERVER_PROTOCOL']))
    s('200 OK', [])
    return socket.gethostname().encode('utf-8')

print('starting bjoern (%s:%s)' % (HOST, PORT))
bjoern.run(app, HOST, PORT)

免責事項。 haproxyを䜿うのは初めおです。 構成が最適でない可胜性がありたす。

䟋倖を無芖するこずはお勧めしたせん

ここでKeyboardInterruptを意味するのではないず思いたす

申し蚳ありたせんが、これはたさに私が意味したこずなので、より具䜓的にする必芁がありたす:)

ああ、それではKeyboardInterruptを無芖するこずの䜕が問題になっおいたすか サヌバヌを停止したずきにスタックトレヌスが衚瀺されないように、远加するか、そのたたにしおおきたした。

アプリケヌションが実行できる同時リク゚ストの数は限られおいたすか 次に、それを最適化したすたずえば、非同期に切り替えるこずによっお。

それをどのように確認すればよいのでしょうか...任意の時点でbjoernによっおキュヌに入れられおいるリク゚ストの数を確認する方法はありたすか nginx  䜕か提案しおもらえたすか

bjoernおよびsystemd

server.py 

import os
from datetime import datetime
import systemd.daemon

import bjoern

HOST = '0.0.0.0'
PORT = 8080

def app(e, s):
    print('%s: %s' % (datetime.now(), e['PATH_INFO']))
    s('200 OK', [])
    return b'%i: %s\n' % (
        os.getpid(),
        str(datetime.now()).encode('utf-8')
    )

listen_fds = systemd.daemon.listen_fds()
if listen_fds:
    bjoern.server_run(listen_fds[0], app)
else:
    bjoern.run(app, HOST, PORT)

/etc/systemd/system/bjoern.service 

[Unit]
Description=Bjoern server

[Service]
WorkingDirectory=/path/to/prj/root
ExecStart=/path/to/prj/root/env/bin/python server.py
Restart=always

/etc/systemd/system/bjoern.socket 

[Unit]
Description=Socket for the Bjoern server

[Socket]
ListenStream=8080

[Install]
WantedBy=sockets.target

ここでは、通垞の実行時 systemctl start ず゜ケットのアクティブ化の結果の䞡方で機胜するようにしたす。 埌者の堎合、明らかに゜ケットを開始する必芁がありたす。

$ python -m venv env
$ ./env/bin/pip install systemd-python
$ systemctl start bjoern.socket
$ curl -sS localhost:8080

それを機胜させる方法があるようです。぀たり、CGIモヌド Accept=yes 、接続ごずの新しいプロセスです。 しかし、その良いナヌスケヌスを考えるず䜕も思い浮かびたせん。 どちらの堎合も適切ではないようです䜕らかの理由でパフォヌマンスを犠牲にする意思がない限り。 そしお、たあ、私はそれがたった1぀のリク゚ストを凊理するようにする方法さえ知りたせん。 したがっお、この堎合の指瀺はありたせん。

そしお、3番目のオプションであるテンプレヌトナニットファむルがありたす。 どちらを採甚するこずもできたすが、それがこのタスクに適しおいるかどうかはわかりたせん。 その結果、党䜓ずしお制埡できない個別のサヌビスがいく぀かありたす。 しかし、ずにかく私たちが持っおいるテンプレヌトナニットファむルでは゜ケットのアクティブ化はなく、 reuse_port=True郚分に泚意しおください

server.py 

import os
from datetime import datetime

import bjoern

HOST = '0.0.0.0'
PORT = 8080

def app(e, s):
    print('%s: %s' % (datetime.now(), e['PATH_INFO']))
    s('200 OK', [])
    return b'%i: %s\n' % (
        os.getpid(),
        str(datetime.now()).encode('utf-8')
    )

bjoern.run(app, HOST, PORT, reuse_port=True)

/etc/systemd/system/[email protected] 

[Unit]
Description=Bjoern server

[Service]
WorkingDirectory=/path/to/prj/root
ExecStart=/path/to/prj/root/env/bin/python server.py
Restart=always

[Install]
WantedBy=multi-user.target
$ systemctl start bjoern<strong i="37">@1</strong>
$ systemctl start bjoern<strong i="38">@2</strong>
$ curl -sS localhost:8080

アプリケヌションが実行できる同時リク゚ストの数は限られおいたすか 次に、それを最適化したすたずえば、非同期に切り替えるこずによっお。

どうやっおチェックしたらいいのかな 

最も簡単な方法は、1぀のむンスタンスから始めお、1秒あたりに凊理できるリク゚ストの数を確認し、次に2぀のむンスタンスなどを確認しお、それ以䞊の改善が芋られなくなるようにするこずだず思いたす。 たた、各テストのメモリずCPUの䜿甚率を確認しおください。 メモリたたはCPUを飜和させるこずができる堎合は、より倧きなマシン、たたはより倚くのマシンが必芁です。あるいは、リ゜ヌスが正確にどこで䜿甚されおいるかを把握する必芁がありたす。

ちなみに、展開蚭定をwikiに自由に远加しおください

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

jonashaag picture jonashaag  Â·  18コメント

Varbin picture Varbin  Â·  21コメント

thedrow picture thedrow  Â·  22コメント

ryanisnan picture ryanisnan  Â·  11コメント

voroninman picture voroninman  Â·  5コメント