Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用多线程运行PHP (tesseract)

使用多线程运行PHP (tesseract)
EN

Stack Overflow用户
提问于 2016-08-10 13:43:23
回答 3查看 373关注 0票数 1

我需要通过tesseract发送一些图像,为了节省时间,我想并行运行tesseract,最多可运行6个实例。

我已经看过这个问题了,但是我真的不知道如何写代码

How can one use multi threading in PHP applications

从数据库中获取所有图像,并将结果与与图像相关的其余信息一起写回数据库中的特定行

有人能链接到一个例子,或者有人能写一个关于如何做这项工作的快速例子吗?

当一个进程完成时,必须启动一个新的进程,所以总是有多达6个进程同时运行?

更新

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Command {
    private $descriptorspec;
    
    private $output = '';
    
    public function __construct(){
        $this->descriptorspec = [
            0 => ['pipe', 'r'], // stdin
            1 => ['pipe', 'w'], // stdout
            2 => ['pipe', 'w'], // stderr
        ];
    }
    
    public function output(): string{
        return $this->output;
    }
    
    public function exec(string $syntax): string{
        $process = proc_open($syntax, $this->descriptorspec, $pipes);
        
        $this->output = stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        
        $stderr = stream_get_contents($pipes[2]);
        fclose($pipes[2]);
        
        proc_close($process);
        
        return $stderr;
    }
}

$Cmd = new Command;
$Cmd->exec('tesseract ...');
EN

回答 3

Stack Overflow用户

发布于 2016-08-10 14:07:42

不要这样做。PHP对多线程的支持真的很糟糕。相反,请使用多进程。使用proc_open & co。-- http://php.net/manual/en/function.proc-open.php

票数 0
EN

Stack Overflow用户

发布于 2016-08-10 14:11:26

您不需要使用多线程。要运行6个工作进程,而不需要与父进程同步-您可以使用proc_open

多线程更快,占用的资源更少(它没有单独的命名空间),你可以比work多运行4倍,但多线程需要用非ZTS构建PHP (一些扩展不能与非ZTS一起工作),并且需要一些你能理解的pthread模型。

举个例子:

我们使用proc_open创建了6个worker,并使用基础进程侦听孩子(我使用我的包装器,使用Ev或事件库或不使用它们) (child-processes),也许你会喜欢包装器reactphp (child-processes)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    $child = new ChildProcesses();
    $child->add('<system command>');
    $child->add('<system command>');
    $child->add('<system command>');
    $child->add('<system command>');
    $child->add('<system command>');
    $fails = $child->check(null, function(ChildProcess $process) {
        echo 'Error with chld process';
    });

或者使用pthread阅读官方文档。您需要在非ZTS中重新编译PHP,并安装pthread扩展。对于您的问题,我将使用Pool

您需要查看此页面中的第一个示例Pool pthreads

更新:

如果你需要所有的时间--6个工人。您需要创建六个监听器。进程之间的通信使用zmq或rabbitmq、gearman或其他不同的队列。你的进程永远不会死,倒下的进程会被监督者抬起来。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$loop = Factory::create();
$context = new Context($loop));
$context->getSocket(\ZMQ::SOCKET_SUB);
$context->connect($host);
$context->subscribe('you_queue');
$context->on('messages', function($messages){
    // get specific data and run operation
});
$loop->run();

注意,zmq不是完全排队的。

  1. It not save message
  2. react / zmq使用EventLib,所以实际上我的示例是zmq

您需要使用Gearman或RabbitMQ -您的任务具有理想的功能

尊敬的格言

票数 0
EN

Stack Overflow用户

发布于 2016-08-20 15:56:03

我写了一个例子(基于child-processes)。这应该可以解决您的问题:

这是parent.php:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$child = new ChildProcesses();
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w1'));
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w2'));
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w3'));
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w4'));
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w5'));
$child->addProcessInstance(new \TkachInc\ChildProcesses\ChildProcess('php worker.php -w6'));
$child->daemon();

和您的worker.php (我添加了示例输出,您需要删除它):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$options = getopt("w:");
if(isset($options['w']))
{
    echo $options['w'].PHP_EOL;

    switch ($options['w'])
    {
        case "1":
            sleep(5);
            break;
        case "2":
            sleep(5);
            break;
        case "3":
            sleep(7);
            break;
        case "4":
            sleep(5);
            break;
        case "5":
            sleep(7);
            break;
        case "6":
            sleep(5);
            break;
    }
}

// your logic to receive from database and write to database

尊敬的格言

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

https://stackoverflow.com/questions/38875197

复制
相关文章
[MachineLearning]tesseract使用
https://github.com/tesseract-ocr/tesseract
wOw
2018/09/18
1.6K0
[MachineLearning]tesseract使用
PHP使用swoole实现多线程爬虫[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111933.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
6000
PHP使用swoole实现多线程爬虫[通俗易懂]
PHP使用swoole实现多线程爬虫
在swoole中,php可以借助其启动子进程的方式,实现php的多进程: <?php $s_time = time(); echo '开始时间:'.date('H:i:s',$s_time).PHP_
码农编程进阶笔记
2021/07/20
8210
tesseract-ocr的使用
——显示出tesseract的版本号则表示安装,及环境变量配置成功。否则根据提示检查安装失败原因
搁浅同学
2022/07/21
1.2K0
如何运行PHP代码_运行php网站
相信不少初学者会遇到不知道如何运行php这个尴尬的问题,小白博主就来一次比较详细的介绍
全栈程序员站长
2022/11/11
10.1K0
如何运行PHP代码_运行php网站
PHP使用CURL模拟多线程发送请求
本文章讲述了php使用curl模拟多线程发送请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。
程序猿的栖息地
2022/04/29
2.8K0
PHP使用CURL模拟多线程发送请求
php pthreads多线程的安装与使用
安装Pthreads 基本上需要重新编译PHP,加上 –enable-maintainer-zts 参数,但是用这个文档很少;bug会很多很有很多意想不到的问题,生成环境上只能呵呵了,所以这个东西玩玩就算了,真正多线程还是用Python、C等等
超级小可爱
2023/02/23
8170
PHP之多线程
前些天帮同事查一个问题,第一次接触到了 PHP 的多线程,原以为 PHP 普遍都是单线程模型,并不适合多线程领域,花些时间翻了几个多线程的项目源码之后,发现 PHP 的多线程也颇有可取之处,活用起来,用来解决某些问题竟然非常适合。
全栈程序员站长
2022/09/07
1.7K0
PHP之多线程
安装tesseract
tesseract.exe下载地址:https://digi.bib.uni-mannheim.de/tesseract/
祝你永远进步
2020/05/19
4470
Tesseract:训练
http://www.zmonster.me/2015/05/05/tesseract-training.html
bear_fish
2018/09/19
1.8K0
Tesseract:训练
PHP运行模式
CGI即通用网关接口(Common Gateway Interface),它是一段程序, 通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。 CGI已经是比较老的模式了,这几年都很少用了。
黄规速
2022/04/14
1.9K0
PHP运行模式
PHP运行模式有4钟:http://blog.csdn.net/hguisu/article/detPHP
Java架构师必看
2020/10/26
2.2K0
Tesseract:安装与命令行使用
http://www.zmonster.me/2015/04/17/tesseract-install-usage.html
bear_fish
2018/09/19
2.7K0
Tesseract:安装与命令行使用
多线程编程 - PHP 实现
枕边书
2018/01/04
3.1K0
多线程编程 - PHP 实现
C语言多线程运行详解
pthread_create(&temp, NULL, print_b, NULL);
里克贝斯
2021/05/21
2.6K0
C语言多线程运行详解
Python 强制停止多线程运行
"""raises the exception, performs cleanup if needed"""
授客
2019/09/10
2.5K0
Python 强制停止多线程运行
Tesseract OCR初探
Refer from http://hellosure.github.io/ocr/2014/10/11/tesseract-ocr/
全栈程序员站长
2022/07/25
7.1K0
Tesseract OCR初探
Crontab运行php脚本
首先,确认PHP可执行文件的位置——对于大多数Linux系统,几乎肯定是/usr/biPHP
Java架构师必看
2021/03/22
2.5K0
点击加载更多

相似问题

tesseract多线程c#

21

tesseract 3.00是多线程的吗?

36

Tesseract运行错误

193

php Tesseract错误!找不到命令"tesseract“

1261

如何在PHP中使用Tesseract OCR

62
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文