gpt4 book ai didi

asynchronous - 请求没有分布在 gunicorn worker 中

转载 作者:行者123 更新时间:2023-12-05 08:58:31 24 4
gpt4 key购买 nike

我正在尝试使用 tornado 和 gunicorn 处理工作线程来编写一个应用程序。我创建了如下所示的代码,但尽管启动了多个工作人员,但它并没有共享请求。一名工作人员似乎一直在处理所有请求(不是间歇性的)。

代码:

from tornado.web import RequestHandler, asynchronous, Application
from tornado.ioloop import IOLoop

import time
from datetime import timedelta
import os

class MainHandler(RequestHandler):
def get(self):
print "GET start"
print "pid: "+str(os.getpid())
time.sleep(3)
self.write("Hello, world.<br>pid: "+str(os.getpid()))
print "GET finish"

app = Application([
(r"/", MainHandler)
])

控制台输出(我在 3 秒窗口内轻松刷新了 3 个浏览器选项卡,但它们仍然使用相同的进程并按顺序运行):

2014-04-12 20:57:52 [30465] [INFO] Starting gunicorn 18.0
2014-04-12 20:57:52 [30465] [INFO] Listening at: http://127.0.0.1:8000 (30465)
2014-04-12 20:57:52 [30465] [INFO] Using worker: tornado
2014-04-12 20:57:52 [30474] [INFO] Booting worker with pid: 30474
2014-04-12 20:57:52 [30475] [INFO] Booting worker with pid: 30475
2014-04-12 20:57:52 [30476] [INFO] Booting worker with pid: 30476
2014-04-12 20:57:52 [30477] [INFO] Booting worker with pid: 30477
GET start
pid: 30474
GET finish
GET start
pid: 30474
GET finish
GET start
pid: 30474
GET finish

我也尝试过将 IOLoop.add_timeout 与异步一起使用,在那种情况下没有什么比这更好的了。通过阅读,我意识到 gunicorn 甚至可能以某种方式查看内部并将异步装饰器解释为意味着它可以将它们全部塞进一个线程,所以我恢复到我在这里展示的内容。为了我的理智,我已经pastebinned我所做的未经编辑的版本。

总而言之,为什么 gunicorn 不将我的请求分发给所有工作人员?

最佳答案

嗯,显然是浏览器造成的。通过查看 wireshark,我确定至少 firefox(我假设 chrome 正在做同样的事情)在 URL 相同时序列化请求。也许这是因为如果它们是可缓存的,它就可以重用它们。

关于asynchronous - 请求没有分布在 gunicorn worker 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com