微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从在ubuntu上运行的Apache服务的python脚本中生成长时间运行的python进程?

如何解决如何从在ubuntu上运行的Apache服务的python脚本中生成长时间运行的python进程?

如果未在网络环境中使用,到目前为止,我发现的所有内容都是好的。

我有一个在Apache中运行的简单的python'admin tool'网络应用程序,并且我在vhost中使用了简单的配置:

AddHandler cgi-script .py.

不需要高性能,没有python框架。用户选择通过GET请求发送到服务器和python脚本的特定条件,然后由apache调用并编译报告。问题在于报告的复杂性正在增加,并且编译此报告所花费的时间可能超过20分钟,因此我想产生一个全新的完全独立的过程来异步生成报告,从而允许服务器快速返回给客户端

我的问题是,我已经尽力尝试了所有可以做到的事情,并且一切都以相同的方式失败了。当我生成一个新进程时,父脚本将不会返回到客户端,直到新进程完成为止。

所有这些操作都完全相同-它们启动了一个新进程,但主脚本等待子进程完成后再返回客户端。我希望主脚本直接返回客户端,并让新生成的进程继续运行以编译报告。

os.system("""
cd /the_directory
python -m web.wait &
""")
command = ['python','/the_directory/wait.py &']
Popen(command,shell=True,start_new_session=True)
L = ['python','/the_directory/wait.py']
os.spawnvp(os.P_NowAIT,'python',L)
L = ['test.sh']
os.spawnvpe(os.P_NowAIT,'/the_directory/test.sh',L,os.environ)


where test.sh contains: 

#!/bin/sh
/the_directory/wait.py &
jobs = []
for i in range(5):
    p = multiprocessing.Process(target=wait.dostuff,)
    jobs.append(p)
    p.start()

我想要最简单的解决方案-这是仅由我为少数用户维护的管理工具。

如果真的没有办法做到这一点,那么我想我将不得不每分钟运行一次cron并使用一个简单的队列,也许使用redis之类的东西,但这并不理想。

我曾经在PHP中相对容易地做这种事情,我不敢相信在python中是不可能的。

解决方法

您可以将Popenshell=False一起使用

示例:

Popen(["bash","test.sh"],shell=False)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。