0
私は、作業者クラスgeventのGunicornを使用して基本的なフラスコアプリケーションを作成しました。私が遭遇した問題は以下の通りです。私はこのような基本的なフラスコアプリがあった場合:Flaskアプリケーションでガンコーンを使用したマルチプロセッシングを使用する
sudo gunicorn -b 0.0.0.0:8000 app:app --worker-class gevent
が、技術2ウォンを」:
from multiprocessing import Pool
import Queue
import random
from threading import Thread
import time
from flask import Flask
app = Flask(__name__)
def f(x):
return random.randint(1, 6)
def thread_random(queue):
time.sleep(random.random())
queue.put(random.randint(1, 6))
def thread_roll():
q = Queue.Queue()
threads = []
for _ in range(3):
t = Thread(target=thread_random, args=(q,))
t.start()
threads.append(t)
for t in threads:
t.join()
dice_roll = sum([q.get() for _ in range(3)])
return dice_roll
@app.route('/')
def hello_world():
# technique 1
pool = Pool(processes=4)
return 'roll is: %s \n' % sum(pool.map(f, range(3)))
# technique 2
return 'roll is: %s \n' % thread_roll()
if __name__ == '__main__':
app.run(debug=True)
をそして、私はそれで2つの手法を取った私はそれが好きで実行した場合、技術1はgunicorn解除されますt。テクニック1はマルチプロセッシングに依存し、テクニック2はスレッドに依存しているからですが、なぜgeventワーカークラスがプールを許さないのか分かりません。
私はこの勧告は – Rob
私はyoureのはあなたが読んでいるはずgeventを使用している場合は、このhttps://stackoverflow.com/help/how-to-answer – Rob
を確認お勧めします何を意味するのかわからないんだけどdocsを使用する前にジント/イベントレットコードを実行する前にコードに挿入する必要があります。モンキーパッチは低レベルのコールをノンブロッキングにします。 テクニック2は、Pythonのネイティブスレッドで動作します。サルがそれにパッチを当てなければ、それはブロックされます。モンキーパッチは、そのスレッド呼び出しの低レベル呼び出しを非ブロックにします。 (RTMS) – ionheart