在我的应用程序中,我需要"模拟" HTTP超时。简而言之,在这种情况下:
client -> myapp -> server
client
与myapp
建立HTTP POST连接,并将其转发至server
。但是,server
由于网络问题或类似问题而无法响应。我遇到了client
的{strong>开放TCP会话,我需要放弃。
我的应用程序使用web.py,nginx和uwsgi。
我无法返回自定义HTTP错误,例如418 I am a teapot
- 它必须是连接超时才能尽可能地反映server
的行为。
一个hack-y解决方案可能(我猜)仅time.wait()
直到client
断开连接,但这会使用uwsgi线程,我觉得它可能导致资源匮乏,因为{{{ 1}}其他连接可能会发生超时。另一种方法指出here但是这个解决方案意味着将某些内容返回server
,这不是我的情况。
所以我的问题是:是否有一种优雅的方法可以从python代码中以编程方式杀死client
工作者?
到目前为止,我已找到
set_user_harakiri(N)
我可以与uwsgi
结合使用。然而,在这种情况下,uwsgi检测到harakiri并尝试重新产生该工作者。worker_id()
但我不确定如何处理它 - 我找不到有关使用它的大量文档time.sleep(N+1)
解释here disconnect()
似乎没有做任何事情,因为代码会继续并返回connection_fd()
suspend()
会暂停实例,但NGINX会返回样板错误页面还有其他想法吗?
更新
事实证明它比这复杂得多。如果我只是关闭套接字或断开与uwsgi的连接,则nginx Web服务器会检测到服务器错误'并返回500样板错误页面。并且,我不知道如何告诉nginx停止这么有用。
答案 0 :(得分:0)
答案是两者的结合。
444
uwsgi_intercept_errors
指令。