- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
事先澄清一下,这只是一个学习项目,我无意在生产中使用它。已经有几个非常好的 Python 应用程序服务器。但我想学习更多关于并发的知识,所以我着手写一个(我认为)我知道的东西。
此外,因为我想“更接近金属”,所以我开始只使用 Socket 并希望保持这种状态。
以下是我目前所拥有的重要部分。 self.iq 是一个队列对象 (inbound_queue),它什么都不做,只是将请求(包括套接字对象)放入 outbound_queue,然后 Consumer 对象从 outbound_queue 获取请求并将其传递给 ResponseHandler。这似乎只需要我点击它就可以正常工作,但我担心我会通过天真的实现让自己陷入竞争状态。专门将事物分配给特定于请求的 ServerClass 对象。
所以问题是:是否有更好的方法来执行此操作,或者我的队列使用是否会阻止两个线程获取并操作同一对象?我是否应该将 WSGI 环境之类的东西封装到一个单独的对象中,该对象也可以传递到队列中?由于需要传入回调函数,因此在尝试编写符合 WSGI 标准的服务器时,做这样的事情会很棘手。
class Consumer(threading.Thread):
def __init__(self, out_queue, server):
threading.Thread.__init__(self)
self.out_queue = out_queue
self.server = server
def run(self):
while True:
item = self.out_queue.get()
self.server.ResponseHandler(self.server, item)
self.out_queue.task_done()
class QueueConsumerServer(object):
methods_allowed = ['get', 'post', 'put', 'patch', 'delete', 'options', 'upgrade']
def __init__(self, host, port, application):
self.host = host
self.port = port
self.application = application
self.iq = Queue.Queue()
self.oq = Queue.Queue()
self.socket = socket.socket()
self.socket.bind((self.host, self.port))
#<snip of lots of assigning stuff to environ>
self.environ = environ
headers_set = []
headers_sent = []
for i in xrange(3):
thr = Producer(self.iq, self.oq)
thr.daemon = True
thr.start()
for i in xrange(3):
thr = Consumer(self.oq, self)
thr.daemon = True
thr.start()
def handle_request(self):
self.socket.listen(1)
try:
while True:
cli, addr = self.socket.accept()
data = cli.recv(1024)
request_data = self.parse_request_data(data)
req.path = request_data[1]
req.cli = cli
self.iq.put(req)
return
except Exception, ex:
print 'e', ex,
sys.exit(1)
finally:
sys.stdout.flush()
self.socket.close()
最佳答案
Python 队列是 thread safe ,因此您编写的代码中没有竞争。
关于解决此问题的更好方法,您的代码可能会达到 GIL不久。我建议调查 multiprocessing .
关于python - 如何在 Python WSGI 服务器中实现多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901397/
我正在尝试了解 WSGI 的功能并需要一些帮助。 到目前为止,我知道它是一种服务器和应用程序之间的中间件,用于将不同的应用程序框架(位于服务器端)与应用程序连接,前提是相关框架具有 WSGI 适配器。
正如之前多个问题/答案中所强调的,即this和 this我已将 WSGISocketPrefix 配置为 /etc/httpd/run/wsgi /etc/httpd/run目录具有root:apac
正如之前多个问题/答案中所强调的,即this和 this我已将 WSGISocketPrefix 配置为 /etc/httpd/run/wsgi /etc/httpd/run目录具有root:apac
我刚刚开始使用协同程序,并阅读了有关 gevent 和 greenlets 的内容。为了进行测试,我通过 gevents pywsgi 模块提供了这段代码: from gevent.pywsgi im
我正在尝试了解 WSGI 的工作原理。我知道我可以阅读规范,但我仍然想知道如何创建 spawning应用?一个完整的“ Hello World ”。 有人可以给我举个例子吗?有了一切,文件命名,创建模
我正在构建一个简单的 Web 服务,要求对所有请求进行签名。签名哈希是使用包括请求正文的请求数据生成的。我的愿望是拥有一个验证请求签名的中间件组件,如果签名无效则以错误响应。问题是中间件需要使用 en
为什么会出现此错误? Daemon process called 'dom_server' cannot be accessed by this WSGI application: /home/sta
HTTP格式 HTTP GET请求的格式: ? 1
我读过很多类似 this one 的帖子详细说明如何使用 WSGI 动态返回图像。但是,我看到的所有示例都是以二进制格式打开图像,读取它然后返回该数据(这对我来说很好用)。 我一直在尝试使用内存中的
我正在尝试使用 Apache 为我的网页提供服务,并且想知道 wsgi.py 和 django.wsgi 之间的区别。 两者都有文档,但我不确定应该实现哪一个。我在 Django 1.4、Apache
我正在尝试使用 uwsgi 运行 Django 应用程序。我发现的大多数指令都引用了“--wsgi-file”和“--module”来指定应用程序,但是“uwsgi”没有提到这些选项,当我尝试使用它们
我对以下术语感到非常困惑, 1.wsgi 2.python_wsgi 3.wsgi服务器 4. mod_wsgi 5. python web服务器网关接口(interface)(PEP3333) 这些
我通过如下设置 apache 服务器在 apache2/Mac OS X 上使用 mod_wsgi。 Order allow,deny Allow from all WSGIScri
对于我们的网络服务,我编写了一些逻辑来防止 multipart/form-data POST 大于 4mb。 它归结为以下内容(我已经剥离了所有 WebOb 用法并将其简化为普通的 WSGI 代码):
我有一个 Flask Web 服务器,为使用 Flask-login 的用户进行基本帐户身份验证。如果我自己运行网络服务器,帐户身份验证将按预期工作。使用 Apache 和 mod-wsgi 运行 F
我在 centos 6.9 机器上使用 httpd 和 mod_wsgi 和 httpd 这里是相关文件,我正在尝试在 apache 2.15 版本上部署 django,尝试谷歌但无法解决问题,任何帮
我将在虚拟主机的 ubuntu 服务器上设置一个 django 应用程序。 我已经配置了我的虚拟主机,所以出现了一些问题! 但是由于您在此处看到的一些问题,它仍然给我 500 内部错误: mod_ws
我有一个相当简单、朴素的 Python/WSGI/Pyramid 网络服务器。 它在使用 pyramid.config.Configurator().make_wsgi_app() 构建的服务器上使用
我试图在 Amazon 的 EC2 实例上发布我的网站,但我一直收到 500 错误。我真的不知道为什么。 //日志文件 [Sun Feb 17 23:12:48.066802 2013] mo
我正在尝试在 ubuntu 上的 apache2 上安装 mod_wsgi。所以我安装了 libapache2-mod-wsgi 包,我用 a2enmod 激活了他。 我有一个网站 (language
我是一名优秀的程序员,十分优秀!