[英]Using multiprocessing with gunicorn in Flask application
我使用Gunicorn和worker类的gevent开发了一个基本的flask应用程序。 我遇到的问题如下。 如果我有一个像这样的基本烧瓶应用程序:
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)
我采用了两种技术,如果我这样运行,则技术1会破坏金枪鱼:
sudo gunicorn -b 0.0.0.0:8000 app:app --worker-class gevent
但是技术2不会。 我看到这是因为技术1依赖于多处理而技术2依赖于线程,但是我无法弄清楚为什么gevent worker类不允许使用池?
如果您使用的是gevent。 您应该尝试使用monkey_patch。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.