首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >豆茎/平茎在背景中不工作

豆茎/平茎在背景中不工作
EN

Stack Overflow用户
提问于 2014-02-28 12:57:33
回答 1查看 1.8K关注 0票数 1

我在Ubuntu服务器上设置Phean秸秆时遇到了麻烦。我对编程比较陌生,我做了所有的步骤:-用sudo apt安装豆秆-从https://github.com/pda/pheanstalk/获得安装豆茎

这是我的密码:

代码语言:javascript
复制
require_once('pheanstalk_init.php');

$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');

$pheanstalk
->useTube('testtube')
->put(exec("cat ../uploads/databases/app_data/Filename.sql | sqlite3 ../uploads/databases/Filename.sqlite"));

$job = $pheanstalk
->watch('testtube')
->ignore('default')
->reserve();

echo $job->getData();

$pheanstalk->delete($job);

问题是运行这段代码需要4到5分钟,出于某种原因,exec命令没有在后台运行。

对我做错了什么有什么想法吗?事先非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-03-27 08:29:22

这是个老问题,你可能已经解决了.总之,这里有一个简短的答案和更详细的解释:

TL;DR :简单的回答:问题是,您在put()方法中运行(cpu/disk )密集型代码,并且需要在$job>getData()之后在worker中运行它。

说明:Bean秸秆充当消息队列,允许您将信息生产者与消费者分离开来。这样做的想法是,您只需要将您想要完成的任务的描述发布到队列中,生成该描述并将其发布到队列中非常快速。消耗处理的实际资源(CPU/RAM/磁盘IO/网络)发生在使用者(工作人员)中,当有可用资源时,生产者可以自由地做其他事情。如果没有可用的工人,那么这些工作就会堆积在队列中。

因此,在您的例子中,例如,将生产者和消费者分离为chief.php和worker.php:

chief.php

代码语言:javascript
复制
<?php
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');
$pheanstalk
->useTube('testtube')
->put("cat ../uploads/databases/app_data/Filename.sql | sqlite3 ../uploads/databases/Filename.sqlite");
?>

worker.php:

代码语言:javascript
复制
<?php
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');

while(true){
  $job = $pheanstalk->watch('testtube')->ignore('default')->reserve();
  $cmd = $job->getData();
  exec($cmd);
  $pheanstalk->delete($job);
}

?>

因此,当您运行一个工作程序时,它将连接到beanstalkd服务器,并等待一个作业被发布到'testtube‘队列/管上。然后,它将完成所描述的工作,并将其从队列中删除,并循环,以便在它到达时处理另一个作业。如果你愿意的话,你也可以并行运行几个工人。

注意:beanstalkd服务器不运行您的工人;它只将作业从生产者分配给消费者。因此,您需要自己管理正在运行的worker进程。我个人更喜欢将工作人员作为runit服务运行,这样当他们有任何问题时,他们将被runit重新启动,他们的输出将被记录下来。当然,您可以使用任何您喜欢的进程监视工具:runitsystemdmonit等等。

在您最喜欢的进程监视器下运行beanstalkd本身也是个好主意,以防它崩溃,这是不太可能的,但可能会发生(一年前我就遇到过这种情况)。

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

https://stackoverflow.com/questions/22095874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档