繁体   English   中英

Subprocess.Popen等到孩子完成

[英]Subprocess.Popen wait untill the child finish

我正在开发基于CGI,Apache2,python(2.76)的网络工具。 Web服务器在Ubuntu虚拟机上。 用户提交作业后,我希望服务器立即返回网页,显示指向即将发布的结果的链接。 因为计算将花费一些时间,所以我使用Subprocess.Popen来调用一个函数,该函数可以完成所有计算。 下面显示了我的代码流程。 我在自己的(Mac)计算机上进行了测试,它可以在计算完成之前立即返回一个网页。 但是在Ubuntu虚拟机上,它将返回页面,直到计算完成。 Subprocess.Popen在Ubuntu上不起作用吗?

Main()
   preprocess 
   return_a_wen_page
   Subprocess.Popen(function_do_calculation)

subprocess.Popen可在Ubuntu上使用。 问题可能是您从Apache调用它。 您可以尝试重定向标准流:

with open(os.devnull, 'r+b', 0) as DEVNULL:
    subprocess.Popen(cmd, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL,
                     close_fds=True)

如果没有帮助,还添加preexec_fn=os.setsidstart_new_session=True模拟)。 或者只是发送一条消息((unix)套接字,命名管道)到可以在其上调用subprocess.Popen进程的计算机上独立运行的守护进程。请自由打开而不是cgi脚本(请考虑是否像celery这样的东西可以为您简化它)。

这是我第一次做Web应用程序,我不知道mod_wsgi。

with open(os.devnull, 'r+b', 0) as DEVNULL:
      subprocess.Popen(cmd, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL,close_fds=True)

暂无
暂无

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

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