如何在请求被nginx/flup响应后运行后台线程?

2024-06-26 18:00:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的堆栈是Nginx+Flup+Flask。在

所以我有一个有限线程,它运行一个有有限生存期的后台线程。在

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

它被执行,持续一到两分钟,然后就结束了。关键是,为了响应,我让它在后台进程仍在运行时首先向请求返回一个值。在

问题是,不知何故,fcgi线程总是被杀死。在

我试过把连接超时改为1800秒

^{pr2}$

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

我怎么也可以

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

2)阻止nginx杀死我的线程,至少不要这么快。在

谢谢!在


Tags: run代码flasktarget堆栈nginx线程thread
1条回答
网友
1楼 · 发布于 2024-06-26 18:00:52

使用多处理

一旦您返回一个值并完成请求,FastCGI将在您之后清理,这意味着您生成的所有线程。如果你真的需要你的任务继续进行,你必须使用多处理,这样你产生的进程才能在请求结束后继续存在。在

否则,芹菜真的很容易设置,而且正好解决了这个问题你有。。。在

相关问题 更多 >