首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步PHP执行

异步PHP执行
EN

Stack Overflow用户
提问于 2013-05-20 10:25:53
回答 2查看 2.9K关注 0票数 3

我试图通过API运行大量的字段值更新,并且我的PHP脚本遇到了最大的执行时间。

我把我的工作分成更小的任务,异步地作为较小的作业来运行.

异步PHP调用?

我找到了这篇文章,它看起来是对的,但评论有点令人讨厌.使用curl运行外部脚本文件会阻止调用方文件触发最大的执行时间,还是会等待服务器的响应并关闭我的页面?

问题是:您如何在PHP中完成异步作业?有点像Ajax。

编辑::/

有一个项目管理工具,它有很多行数据。我正在使用这个工具API来访问数据行并在我的页面上显示它们。使用“我的工具”的用户将选择带有复选框的多行数据,并在框中键入新值。然后,用户将按下一个“更新行值”按钮,该按钮运行更新脚本。

此更新脚本将可能选择的数百或数千项划分为100组。

此时,我将使用一些异步方法来联系项目管理工具并更新所有100个项。

因为在更新这些项时,该服务器可能需要很长时间才能运行其进程,因此我需要确保我原来的分页作业不再等待来自该操作的请求,这样我就可以发出更多更新项的请求。并允许我的服务器页面对我的用户说:“好的,更新正在进行,这可能需要一段时间,我们将发送一封电子邮件,一旦它完成”。

代码语言:javascript
复制
    $step = 100;
    $itemCount = GetItemCountByAppId( $appId );
    $loopsRequired = $itemCount / $step;            
    $loopsRequired = ceil( $loopsRequired );

    $process = array();

    for( $a = 0; $a < $loopsRequired; $a++ )
    {
        $items = GetItemsByAppId( $appId, array( 
            "amount" => $step, 
            "offset" => ( $step *  $a ) 
        ) );  

        foreach( $items[ "items" ] as $key => $item )
        {
            foreach( $fieldsGroup as $fieldId => $fieldValues )
            {
                $itemId = $item->__attributes[ "item_id" ];
                /*array_push( $process, array(
                    "itemId" => $itemId,
                    "fieldId" => $fieldId,
                ) );*/
                UpdateFieldValue( $itemId, $fieldId, $fieldValues );
                // This Update function is actually calling the server and I assume it must be waiting for a response... thus my code times out after 30 secs of execution
            }
        }  

        //curl_post_async($url, $params);
    }
EN

回答 2

Stack Overflow用户

发布于 2013-05-20 11:24:20

如果您使用的是PHP,请尝试线程或非线程安全版本的叉()

票数 0
EN

Stack Overflow用户

发布于 2013-05-20 11:41:38

根据实现方式的不同,可以使用异步PHP将web请求与处理分离开来,从而将web请求与进程中的任何超时隔离开来(但您可以在单个线程中执行相同的操作)。将任务分解成较小的并发部分会使其运行得更快吗?也许不会--通常情况下,这会延长完成任务所需的时间--只有当您拥有非常大的处理能力并能够有效地分配任务时(例如地图减少),才会出现这种情况。HTTP调用(curl)是像这样分发工作的有效方法吗?不是的。还有其他方法,包括同步和异步消息传递、批处理、进程分叉、threads....each,它们各自的好处和复杂性--我们不知道您想要解决的问题是什么。

因此,即使在我们讨论你的具体问题之前,这看起来并不是一个好的策略。

使用curl运行外部脚本文件会阻止调用方文件触发最大执行时间吗?

它将受到目标服务器上配置的任何超时的限制--如果这是与调用脚本相同的服务器,那么它将是相同的超时。

卷发是否还会等待服务器的响应并关闭我的页面?

我不知道你在这里问的是什么--相反,这意味着你还没有告诉我们功能依赖。

听起来你已经选择了一个解决方案,并且正在努力使它适合你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16647473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档