gpt4 book ai didi

php - 失败时重试 try/catch

转载 作者:可可西里 更新时间:2023-11-01 12:46:50 28 4
gpt4 key购买 nike

我尝试了几种不同的 try/catch 循环来尝试自动解决问题,但它们似乎总是导致软件死机。

$doLoop = true;

while ($doLoop) {

try {
//do a thing
insertIntoDb($data);
} catch (Exception $e) {
//try again
insertIntoDb($data);
//write error to file
writeError($e);
}
}

这是我原来的 try/catch。

问题有时是 MySQL 服务器“消失”,我需要捕获该异常并不断重试,直到它恢复。

我可以在这里更改什么以使其不断重试直到成功?

最佳答案

try block 中使用 break 作为最后一个语句,以便仅在成功时退出循环:

while (true) {
try {
// do something
insertIntoDb($data);
break;
}
catch (Exception $e) {
writeError($e);
}
// sleep 200ms to give the MySQL server time to come back up
usleep(200000);
}

但是您还应该使用 for 循环来限制重试次数。
否则,您的代码可能会无限循环运行:

// limit the number of retries
for ($i=1; $i <= 3; $i++) {
try {
// do something
insertIntoDb($data);
break;
}
catch (Exception $e) {
writeError($e);
}
// sleep 200ms to give the MySQL server time to come back up
usleep(200000);
}

还要注意 usleep() 调用:

这很重要,否则 PHP 进程会在尽可能快地重试时占用所有资源(100% CPU)。您可以调整该值以满足您的需要。 (在您的情况下,200 毫秒可能太长或太短)

另请注意,您可能需要在失败时重新连接到 MySQL 数据库!我的示例中没有包含该案例的代码。

关于php - 失败时重试 try/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com