以编程方式终止uwsgi工作者

在我的应用程序中,我需要“模拟”HTTP超时。 简单地说,在这种情况下:

client -> myapp -> server 

client一个HTTP POST连接到myapp ,并将其转发给server 。 但是,由于networking问题或类似问题, server不响应。 我坚持从client 打开TCP会话 ,我需要放弃。

我的应用程序使用web.pynginxuwsgi

我不能返回一个自定义的HTTP错误,如418 I am a teapot – 它必须是一个连接超时,以尽可能接近server的行为。

一个hack-y的解决scheme可能(我猜)只是time.wait()直到client断开,但这将使用uwsgi线程,我有一种感觉,它可能导致资源匮乏,因为server超时可能发生的其他连接。 另一种方法是在这里指出,但是这个解决scheme意味着返回一些东西给client ,这不是我的情况。

所以我的问题是:是否有一个优雅的方式来杀死一个uwsgi工作程序从Python代码?

到目前为止我find了

  • set_user_harakiri(N) ,我可以结合time.sleep(N+1) 。 然而,在这种情况下,uwsgi检测到harakiri,并尝试重新产生工人。
  • worker_id()但我不知道如何处理它 – 我找不到使用它的很多文档
  • build议使用connection_fd() ,如此处所述
  • disconnect()似乎什么都不做,代码继续并返回到client
  • suspend()暂停实例,但NGINX返回样板错误页面

任何其他的想法?

UPDATE

结果比这更复杂。 如果我只是closures套接字或从uwsgi断开连接,nginx web服务器检测到“服务器错误”并返回一个500样板错误页面。 而且,我不知道如何告诉nginx停止如此有用。

答案是两者的结合。

  1. 从python应用程序返回444
  2. 按照这个答案解释nginx,即使用uwsgi_intercept_errors指令。