我试图在Ubuntu 10.04上安装gearman PHP扩展,PHP固定为5.2,但PHP告诉我它不是一个有效的Zend扩展.
从源代码编译时(或通过pecl安装)没有错误,但在安装完成后,PHP会这样说:
/usr/lib/php5/20060613+lfs/gearman.so doesn't appear to be a valid Zend extension
Run Code Online (Sandbox Code Playgroud)
模块的体系结构与PHP的结构相匹配(我在32位和64位系统上都尝试过它).据我所知,我已经安装了所有依赖项(我假设如果我错过了任何错误,我会得到错误 - 我起初做了).
我正在使用gearman 0.8.0,因为它是在PHP 5.2上运行的最高版本.我使用的是PHP 5.2,因为我最后一次检查时,我们的drupal 6在5.3中表现不佳(据说这已经在核心中修复,但不一定用于模块).
我怀疑这可能与固定PHP有关,因为我找不到有关此行为的任何文档.
我正在寻找构建几十台机器的分布式视频编码集群.我之前从未使用过消息队列,但是我开始玩的那个是Gearman和Beanstalkd.
Beanstalk似乎比Gearman更简单,更容易使用,但它的功能并不像.
我不明白的一件事是......你如何在所有服务器上产生新员工?我打算用php.是否像在CLI中使用"&"运行worker.php一样简单,只是让它坐在那里等待工作?
我注意到在完成一个工作后,gearman实际上并没有杀死进程,但是Beanstalk会这样做,所以我必须在每个服务器上的每个作业之后重启脚本.
目前我更倾向于使用Beanstalk,我计划的一般流程是:
在每台服务器上运行一个微小的cron,检查是否有预先定义的工作量正在运行.如果它不应该是,产生新的工作进程.每个过程大约需要2-30分钟.
也许我的逻辑存在缺陷?让我知道这样做的"更好"或"适当"的方式是什么?
如何列出Gearman作业服务器上的所有作业句柄?我正在尝试提出一种监控方法,我可以在其中列出所有正在运行的线程,并轮询其状态.
列出具有'status'和'workers'的运行作业(如http://gearman.org/index.php?id=protocol中所述)列出了函数和worker,但没有作业句柄.需要工作句柄才能进行GET_STATUS等.
我正在尝试将作业提交与监视分离,因此没有在JOB_CREATED数据包中返回的作业句柄.
我需要设置一个作业/消息队列,其中包含为任务设置延迟的选项,以便免费工作者不会立即获取它,但是在一段时间后(可能因任务而异).我查看了几个linux队列解决方案(rabbitmq,gearman,memcacheq),但它们似乎都没有提供开箱即用的功能.
有关如何实现这一目标的任何想法?
谢谢!
从我所看到的,Gearman不支持预定的工作或延迟工作.我想也许预定的作业可能先排队at,然后在at时间段到期后添加到Gearman队列.
at任务是持久的,因为它们作为文件写入服务器的假脱机目录中的目录.因此,唯一的瓶颈可能是将任务添加到Gearman队列的简单脚本,因为at无法跨服务器分布.将它传递给Gearman来处理实际工作意味着我可以获得适当的工作记录等.
这是解决这个问题的最佳方法吗?您有任何其他想法吗?
我选择Gearman而不是其他队列解决方案的原因是它有一个PHP扩展.
我写的代码用于维护需要发送的电子邮件队列.因此,我可以指定我想在周五的9.50发送电子邮件到example@example.org,例如.
我正在尝试安装最新版本的Gearman.但是,它一直给我错误:
检查Boost Headers版本> = 1.37 ...没有
当我检查我的Boost版本(yum list installed | grep boost)时,所有版本都是1.33.最新的Boost版本是1.46,但似乎CentOS在他们的存储库中没有这个版本.
有没有办法绕过百胜更新Boost到最新版本?
是否可以从后台运行的齿轮工人发送数据(使用PHP)?
我知道我可以将状态(分子/分母)传递给客户端,但我需要"返回"数据.
背景是我需要在不同的服务器上调用worker,如果他们没有响应,主脚本应该继续.所以我想我必须在后台运行工人.但我需要他们的一些数据.
更新: 似乎不可能.我想我要么将数据存储在共享数据库中,要么将其从远程服务器写入本地服务器,或者从远程服务器读取数据,或者做如下所示:
shell_exec('gearman -f getdata-192-168-200-1 > /my/path/ 2>&1 & echo $!');
Run Code Online (Sandbox Code Playgroud) 我有一个闭源非线程安全的C++共享库,它提供了一个函数f :: ByteString - > ByteString.此功能的运行时间可能介于一秒到几个小时之间.
我正在寻找一种方法将计算分配到多个核心/服务器(SIMD).
简而言之,我正在寻找一个提供功能的框架
g :: Strategy b -> (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)
提升一个只能被顺序调用到一个函数的函数,该函数的行为类似于Haskell中的任何其他纯函数.
例如,我希望能够写:
parMap rwhnf f args -- will not work
Run Code Online (Sandbox Code Playgroud)
由于f通过FFI在非线程安全的lib中调用C函数,因此不起作用.因此,我可以用函数g替换函数f,函数g保存作业队列并将任务分派给N个单独的进程.这些进程可以在本地运行或分发:
parMap rwhnf g args -- should works
Run Code Online (Sandbox Code Playgroud)
我已经研究过的潜在框架是
MPI:客户端(Haskell)< - MPI - >代理(C++)< - MPI - >工作者(C++)< - > Lib(C++)
ZeroMQ:客户端(Haskell)< - ZeroMQ - > Broker(C++)< - ZeroMQ - > Worker(C++)< - > Lib(C++)
Cloud Haskell:客户端(Haskell)< - CloudHaskell - > Worker(Haskell)< - FFI - > Lib(C++) …
我有一个Gearman服务器运行一个过程,需要几分钟才能完成.我正在运行一个进度条来显示完成,并且我正在尝试使用Gearman PHP扩展和jobStatus()函数来获取该栏的百分比.
这个工作肯定是活跃的,因为前两个字段(已知+仍在运行)返回true.但是,第三和第四个字段(完成百分比的分子和分母)没有返回.有谁知道为什么会这样或这些数字是如何计算的?
试图在Fedora 64系统上使用bzr从Launchpad的gearmand-0.33.tar.gz构建gearman.
通过tiself执行./configure,以及使用"-with-boost =/usr/include"参数生成警告错误,因为配置进程似乎无法找到/找到boost头文件.
我们也通过"yum install boost*"删除/重新安装了boost头文件
任何指针都会被尝试!
谢谢
./configure
.
.
.
checking if more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... yes
checking for Boost headers version >= 1.39.0... yes
checking for Boost's header version... 1_41
checking for the toolset name used by Boost for g++... gcc44 -gcc
checking boost/program_options.hpp usability... no
checking boost/program_options.hpp presence... yes
configure: WARNING: boost/program_options.hpp: present but cannot be compiled
configure: WARNING: boost/program_options.hpp: check for missing prerequisite headers?
configure: WARNING: boost/program_options.hpp: …Run Code Online (Sandbox Code Playgroud)