我正在查询一种api并将数据发送到另一种。我也在查询mysql数据库。一秒钟内完成所有大约40次操作。然后等待一分钟,然后重复。我有一种PHP可以做的极限。
我的问题是关于两个变量,它们将从前一个循环中随机返回到其最后一个值。它们仅在调用self :: apiCall()之后更改其值(在第二个函数下方)。 $ product和$ productId都会随机更改其值,大约每40个循环更改一次。
我将PHP提升到7.2,将内存增加到512,并将一些变量分配为null以节省内存。我没有收到任何官方的内存警告,但是看着变量随机返回其最后一个值令人困惑。这是代码的样子。
/**
* The initial create products loop which calls the secondary function where
* the variables can change.
**/
public static function createProducts() {
// Create connection
$conn = new mysqli(SERVERNAME, USERNAME, PASSWORD, DBNAME, PORT);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// This will go through each row and echo the id column
$productResults = mysqli_query($conn, "SELECT * FROM product_creation_queue");
if(mysqli_num_rows($productResults) > 0) {
$rowIndex = 0;
while($row = mysqli_fetch_assoc($productResults)){
self::createProduct($conn, $product);
}
}
}
/**
* The second function where I see both $product and $productId changing
* from time to time, which completely breaks the code. Their values
* only change after the call to self::createProduct() which is simply a
* curl function to hit an api endpoint.
**/
public static function createProduct($mysqlConnection, $product) {
// convert back to array from json
$productArray = json_decode($product, TRUE);
// here the value of $productId is one thing
$productId = $productArray['product']['id'];
// here is the curl call
$addProduct = self::api_call(TOKEN, SHOP, ENDPOINT, $product, 'POST');
// and randomly here it can revert to it's last value in a previous loop
echo $productId;
}
答案 0 :(得分:0)
问题是整个40个查询过程花费了超过一分钟的时间才能完成。在第一分钟启动该程序的cron作业将在第一个任务完成之前启动下一个任务,从而以某种方式即时重新分配变量。查询通常用时不到一分钟,但是当查询时间较长时,就会出现冲突,从而导致出现随机性。
我减少了每分钟的查询数量,因此现在该过程在不到60秒的时间内完成,并且从未覆盖任何变量。我仍然不了解如果同时发生两个php进程,变量将如何变化-好像它们会被孤立。