gpt4 book ai didi

使用 pthreads 的 PHP 多线程,类未加载到 Thread 实例中

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

所以我使用 pthreads 异步写入 MongoDB(我想尝试 React,但它不支持 PUT 和 POST HTTP 方法)但是我在使用 Thread 类时遇到了问题。出于某种原因,当我将代码放入 __construct() 和 run() 方法时,执行它会给出一个错误,指出找不到某些类。我使用的是相同的 Composer 自动加载器,当我不使用 Threading API 时没有任何问题。关于它发生的原因有什么想法吗?

<?php

class WriterThread extends Thread
{
private $validator;
private $pathResolver;
private $fileUpload;
private $fileSystem;
public $result;
public function __construct($folderPath, $mongoFS)
{
try {

$this->validator = new MongoFileSystemValidator(1024 * 1024 * 1024 * 2); //the maximum size set to 2GB
// Simple path resolver, where uploads will be put
$this->pathResolver = new FileUpload\PathResolver\Simple($folderPath);
// The machine's filesystem
$this->fileSystem = new MongoFS($mongoFS);

// FileUploader itself

$this->fileUpload = new FileUpload\FileUpload($_FILES['files'], $_SERVER);
//var_dump(get_declared_classes());
$this->fileUpload->setPathResolver($this->pathResolver);
$this->fileUpload->setFileSystem($this->fileSystem);
$this->fileUpload->addValidator($this->validator);
} catch (Exception $e) {
echo $e->getMessage();
}

}
public function run()
{
$this->result = $this->fileUpload->processAll();
}
}

因此 PHP 输出一个错误,指出我在线程中使用的类实例之一的类定义在应该加载时找不到。如果我使用 include 或 require 手动导入它,代码会输出另一个错误,指出我正在尝试访问非对象类型变量的方法。

最佳答案

当您编写 pthreads 应用程序时,类、函数和常量表在您创建线程时默认继承。然而,SPL 自动加载机制,因为它的实现很奇怪——一半在内核中,一半在内核外——必须重新设置,因为在 pthreads 扩展中没有合理的方法来操作它。

解决方案是在::run 中包含您的自动加载代码,通常是 vendor/autoload.php,您应该知道应用程序的此代码的路径。

TLDR;类表可用,自动加载器不可用,包括它...

除了自动加载器问题,该对象的构造也不正常,阅读:https://gist.github.com/krakjoe/6437782

关于使用 pthreads 的 PHP 多线程,类未加载到 Thread 实例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733593/

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