在后台或单独进程中运行perl函数
我在兜圈子。我有一个网页,创建了一个巨大的文件。创建此文件需要很长时间,并且位于子例程中在后台或单独进程中运行perl函数,perl,apache,process,background-process,Perl,Apache,Process,Background Process,我在兜圈子。我有一个网页,创建了一个巨大的文件。创建此文件需要很长时间,并且位于子例程中 我的页面运行此子例程而不等待创建/处理它的最佳方式是什么?由于我是从网页上进行此操作,apache进程是否存在任何问题 执行此任务的最简单方法是简单地使用fork(),并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进 另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(
我的页面运行此子例程而不等待创建/处理它的最佳方式是什么?由于我是从网页上进行此操作,apache进程是否存在任何问题 执行此任务的最简单方法是简单地使用
fork()
,并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进
另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(或通过创建包含必要输入数据的文件)向长时间运行的流程发送工作单元,然后您的web脚本可以立即返回,而单独的流程负责完成长时间运行的任务
这种解耦执行的方法相当常见,通常称为“任务队列”(如果有某种机制在请求进入时对其进行排队)。有许多工具可以帮助您设计此类解决方案(但对于基于文件系统的通信的简单情况,没有它们您可能会很好)。执行此任务的最简单方法是简单地使用
fork()
并在子进程中运行长时间运行的子例程。同时,让家长返回Apache。您指出您已经尝试过这一点,但缺少关于代码外观和失败原因的详细信息,因此很难帮助您沿着这条道路前进
另一种选择是运行一个单独的进程,负责管理长期运行的任务。让网页使用本地套接字(或通过创建包含必要输入数据的文件)向长时间运行的流程发送工作单元,然后您的web脚本可以立即返回,而单独的流程负责完成长时间运行的任务
这种解耦执行的方法相当常见,通常称为“任务队列”(如果有某种机制在请求进入时对其进行排队)。有许多工具可以帮助您设计此类解决方案(但对于基于文件系统的通信的简单情况,没有它们您可能会很好)。我认为您希望创建Apache的工作孙辈,即:
Apache -> child -> grandchild
孩子在叉了孙子后就死了,孙子关上了STDIN、STDOUT和STDERR。(然后孙辈创建文件。)以下是创建僵尸守护程序(一个与Web服务器没有连接的无父级工作进程)的基本步骤。我认为您需要创建Apache的工作孙辈,即:
Apache -> child -> grandchild
孩子在叉了孙子后就死了,孙子关上了STDIN、STDOUT和STDERR。(孙辈然后创建文件。)以下是创建僵尸守护进程(一个与Web服务器没有连接的无父工作进程)的基本步骤。您能在子例程中派生一个子进程来创建文件吗?我已经尝试过了,它在50%的时间内都能正常工作。不知道为什么会失败,也不知道是否有更好的解决方案。你能在子例程中分叉一个子进程来创建文件吗?我已经尝试过了,它有50%的时间可以工作。不确定它失败的原因以及是否有更好的解决方案。在分叉时,确保子进程关闭STDIN、STDOUT和STDERR。否则,它们仍将连接到Web服务器,而Web服务器不会实现关闭连接。当您分叉时,请确保子进程关闭STDIN、STDOUT和STDERR。否则,它们仍将连接到Web服务器,并且它不会实现关闭连接。