我的筹码是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杀死我的帖子,至少不会那么快。
谢谢!
答案 0 :(得分:0)
只要您返回一个值并完成请求,FastCGI就会在您之后进行清理,这意味着您生成的所有线程。如果您真的需要继续滴答作业,则必须使用多处理,这样您生成的过程可以在请求结束后继续存在。
否则,Celery真的很容易设置,并解决了你的问题......