在使用nginx / flup重新发送请求后,如何运行后台线程?

时间:2013-07-26 01:25:04

标签: python django nginx flask flup

我的筹码是Nginx + Flup + Flask。

所以我有一个有限的线程运行一个有限生命周期的后台线程。

t = threading.Thread(target=campaign.run, args=(campaign_obj,))
t.setDaemon(False)
t.start()

它被执行,持续大约一分钟或2分钟,然后结束。问题是,为了响应,我让它在后台进程仍在运行时首先返回一个值。

问题是,在某种程度上,fcgi线程不断被杀死。

我尝试将connection_timeout更改为1800s

    keepalive_timeout 1800s;

重新启动nginx,现在它在线程响应后几乎立即被切断。

我怎么能

1)简单修复我的python代码/ fcgi代码(没有使用redis / rabbitmq / celery重构成一个巨大的新堆栈,因为这真的是一个快速的项目)

2)阻止nginx杀死我的帖子,至少不会那么快。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用多处理

只要您返回一个值并完成请求,FastCGI就会在您之后进行清理,这意味着您生成的所有线程。如果您真的需要继续滴答作业,则必须使用多处理,这样您生成的过程可以在请求结束后继续存在。

否则,Celery真的很容易设置,并解决了你的问题......