Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带FPM的PHP7上的异步/线程_Php_Asynchronous_Pthreads - Fatal编程技术网

带FPM的PHP7上的异步/线程

带FPM的PHP7上的异步/线程,php,asynchronous,pthreads,Php,Asynchronous,Pthreads,我发现pthreads在web环境中不起作用。我在FPM上使用了PHP7.1,在Linux Debian上也使用了Symfony 3.2。我想做的就是,例如: 用户发出请求并放入一个文件(1GB) PHP服务器接收并处理该文件 立即将true返回给用户(jsonResponse),无需等待处理上传的文件 稍后,当处理文件完成时(移动、复制、复制任何您想要的内容),只需添加一个事件或从后台执行回调并通知用户 现在。为此,我创建了控制台命令。我执行一个进程('bin/console my:comma

我发现
pthreads
在web环境中不起作用。我在FPM上使用了PHP7.1,在Linux Debian上也使用了Symfony 3.2。我想做的就是,例如:

  • 用户发出请求并
    放入
    一个文件(1GB)
  • PHP服务器接收并处理该文件
  • 立即将
    true
    返回给用户(
    jsonResponse
    ),无需等待处理上传的文件
  • 稍后,当处理文件完成时(移动、复制、复制任何您想要的内容),只需添加一个事件或从后台执行回调并通知用户
  • 现在。为此,我创建了
    控制台命令
    。我执行一个
    进程('bin/console my:command')->start()来自后台,我进行处理。但这对我来说是用火箭筒杀苍蝇。我必须向这个可执行命令传递许多变量

    我只想创建另一个线程,然后返回给用户而不等待处理

    您可以说这是重复的。并指向
    pthreads
    但是pthreads声明它只适用于CLI。另外,pthreads的最新版本不适用于symfony。(致命错误)


    我被困在这一点上,并且怀疑我是否应该继续为每个上传的文件创建进程,或者移动到
    python->django
    您不需要线程。您需要一个作业队列。看看或类似的东西

    Gearman提供了一个通用的应用程序框架,将工作分配给更适合完成工作的其他机器或流程。它允许您并行工作、负载平衡处理以及在不同语言之间调用函数。它可以用于各种应用程序,从高可用性网站到数据库复制事件的传输。换句话说,它是分布式处理通信方式的神经系统


    你不需要线程。您需要一个作业队列。看看Gearman或类似的东西,我真的很喜欢。我看了看医生。我想这会更适合我的需要。我在问题中也提到了队列,但后来我删除了。在看到Gearman和队列机制之后,我决定使用作业队列。另外,请阅读,例如,每次执行2个线程,假设400个客户机进入服务器,它将运行800个线程。这也不是我想要的。Gearman是这里的关键。我将深入研究它。谢谢哦您可以添加以下内容作为答案:)也许您正在寻找异步处理:@LeonanCarvalho,我处理大多数后台任务,如Sidekiq或Gearman。但我确实喜欢您提供的异步类。我可以下载并使用它们吗?@xangr当然可以,可以随意使用。请注意forked进程中的单例实例,所有单例和套接字/网络连接(如DB连接)都必须在forked进程中重新创建。情况每时每刻都在好转:)