繁体   English   中英

python / django生成后台进程并避免僵尸进程

[英]python/django spawn background process and avoid zombie process

我需要在django中生成后台进程,视图立即返回,后台进程继续进行一些更改,然后更新数据库。 这是通过os.spawnl()函数来完成的,用于调用单独的.py文件。

问题是在后台进程完成后,它成为僵尸函数[python] <defunct>

我该如何避免? 我遵循了这个这个例子但是在django渲染过程之后我仍然将子进程视为僵尸。

我想借此机会练习我的* nix流程管理技能,所以请帮我个忙,不要给我Celery或其他mq /异步任务解决方案,我讨厌依赖。

这需要很长时间才能发表评论 -

wait syscall( os.wait是一个包装器)从死进程中获取退出代码/ pids。 你需要在僵尸进程之上的一代进程中进行os.wait ; 僵尸进程的父级。 当其中一个子进程死亡时,父进程将收到SIGCHLD信号。 如果您坚持自己完成所有这些操作,则需要安装一个信号处理程序来为SIGCHLD设置陷阱,并在信号处理程序中调用os.wait 阅读有关unix进程处理的一些文档和os模块上的Python文档,因为os.wait函数的变体将是非阻塞的,这可能会有所帮助。

import signal
signal.signal(signal.SIGCHLD, lambda _x,_y: os.wait())

我遇到了类似的问题。 我在多处理模块中使用了active_children()。

import multiprocessing

# somewhere in middleware or where appropriate call
active_children()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM