gearman入门简介

Python 陌生代码库阅读之道:从零起步到一周掌控 5 万行老项目的实战策略 文中特别强调"自顶向下+画图+注释"的基础阅读心法,并提供了具体的代码示例和命令行技巧。对于大型项目,建议先建立核心流程的骨架认知,再逐步填充细节,同时注重文档化和测试覆盖率的提升。 掌握这套方法后,开发者可以将陌生代码库的阅读效率提升3倍以上,在一周内建立起对5万行级别项目的整体掌控力。 阅读详情
一、Gearman介绍
gearman,从名字上看叫做“齿轮工”,就是通过齿轮把不同的组件组合在一起。
通常,多语言多系统之间的集成是项目开发中一个比较头疼的问题。
一般会采用RPC风格或者是REST风格的WebService。但是总感觉比较麻烦。
gearman就应运而生了,作为一个任务分发架构,
它能够轻松的将前端的任务通过Job Server分发给后端的Worker处理。

Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。
它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。
Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。
总之,Gearman就是负责分发处理的中枢系统,它的优点包括:
 . 开源:Gearman免费并且开源而且有一个非常活跃的开源社区,如果你想来做一些贡献,请点击 。
 . 多语言支持:Gearman支持的语言种类非常丰富。
   让我们能够用一种语言来编写Worker程序,但是用另外一种语言编写Client程序。
 . 灵活:不必拘泥于固定的形式。您可以采用你希望的任何形式,例如 Map/Reduce。
 . 快速:Gearman的协议非常简单,并且有一个用C语言实现的,经过优化的服务器,
   保证应用的负载在非常低的水平。
 . 可植入:因为Gearman非常小巧、灵活。因此您可以将他置入到现有的任何系统中。
 . 没有单点:Gearman不仅可以帮助扩展系统,同样可以避免系统的失败。

二、Gearman的工作原理
使用Gearman的应用通常有三部分组成:
一个Client、一个Worker、一个任务服务器,即worker。 

Client:    请求的发起者,可以是C,PHP,Perl,MySQL UDF等等。
Job Server:请求的调度者,用来负责协调把Client发出的请求转发给合适的Worker。
Worker:    请求的处理者,可以是C,PHP,Perl等等。

Gearman请求的处理过程过程:
   Client -> Job Server -> Worker。

Client     的作用是提出一个 Job 任务交给 Job Server 任务服务器。
Job Server 会去寻找一个 合适的 Worker 来完成这项任务。
Worker     执行由 Client 发送过来的 Job,并且将结果通过 Job Server 返回给 Client。

Gearman 提供了 Client 和 Worker 的 API,利用这些API 应用可以同 Gearman Job Server来进行通信。
Gearman 内部 Client 和 Worker 之间的通信都是通过 TCP 连接来进行的。
工作的流程如下图所示:

Fig-1 

三、gearman的用处
Gearman首先提供了一个多语言通讯的接口,当然还有比这个更简单有效的办法。
Gearman可以将工作的负载分担到不同的机器中,如下图所示:

Fig-2

Job Server 可以开启多个实例,这样在其中一个发生故障的时候,可以 Failover 到其他的机器上。
同时 Worker 也可以是多个实例进行运行,因为当前的服务器很多都是多核的。

四、关于gearman的分布式任务处理:
1. 其实每一个任务处理的时间并没有降低,相反会稍稍有所增加,主要是数据在网络上传输的一些时间。
2. 前端Client(通常是web服务器)的负载降低了,但是转移到了后端Worker上。
   计算不可能凭空消失,只不过从一台机器转移到了另外一台机器。
3. 同步方式的话,前端Client(通常是Web服务器)等待的时间与后端Worker的数量与当前任务数有关。

如果任务数量<=Worker数量,前端Client等待的时间约等于一个任务处理的时间。
但是当任务数>=Worker数量时,就会出现某些Client等待的情况,
某个Client只有等到一个空闲的Worker,才会将任务交给它进行处理。

设想一下,在任务数<=Worker数量的时候,使用gearman是可以提高响应时间的。
现在有N个任务(Client),M个Worker,每个任务执行时间为t。
如果不是用gearman的话,需要的时间为N*t,平均等待时间为N*t/2。
如果使用了gearman的话,并且N<=M,需要的时间为t,平均等待时间为t;
如果N>M的话,需要的时间为(N/M)*t or (N/M+1)*t。

test.sh
#!/bin/sh
sleep 10
echo "TEST"

开启2个Worker
./gearman -w -f test /home/wangyao/test.sh

开启3个Client:
date;./gearman -f test;date
三个结果分别为:
--------------------------------------------
Wed Mar 17 14:41:31 CST 2010
TEST 
Wed Mar 17 14:41:41 CST 2010
--------------------------------------------
Wed Mar 17 14:41:32 CST 2010
TEST 
Wed Mar 17 14:41:42 CST 2010
--------------------------------------------
Wed Mar 17 14:41:34 CST 2010
TEST 
Wed Mar 17 14:41:51 CST 2010
--------------------------------------------
可以看出前两个Client的任务都用了10s,但是第3个任务却花了17s。
主要在于当第3个任务执行的时候,没有空闲的Worker执行任务,必须等到一个Worker空闲下来,
最先空闲的Worker要在14:41:41,在这个时刻执行第3个任务,现在已经过去了7s,再需要10s完成任务,
因此第3个任务最终用了17s。

4. 异步方式的话,
任务交给后端Worker后,前端Client就返回了,这样用户体验比较好。
但是,存在任务执行失败或者是任务结果反馈的问题。
一般采用数据库作为存储,将任务执行的状态信息、结果等存入数据库;
前端Client定期检查数据库中的结果,再进一步进行操作,是向用户呈现结果还是重新执行任务。

一个应用实例:
Client将log发送到专门的log服务器:
tail -f access_log | gearman -h host -f logger

可能会有多个log服务器,log服务器将接受到的log信息写入到一个文件中:
gearman -w -h host -f logger > log_file

进行分布式grep,需要在每台log服务器设置一个function:
gearman -w host -f logger1 ./dgrep.sh

#!/bin/sh
read pattern
grep $pattern log_file


相应的在其他log服务器上创建logger2,logger3等。

现在,日志已经在日志服务器上了。
我们在其他机器上,想对日志进行分布式的grep。
只需要作为一个client,调用worker logger1、logger2、logger3等。
gearman -h host -f logger1 -f logger2 -f logger3 KEYWORD 
这就可以可以在所有的机器上grep KEYWORD了。

这种方法不是很灵活,每台机器设置一个func,对上层不透明。

总体来看,gearman适合于那种task数量远远大于worker数量的应用。
理论上来看,将计算开销转移到Worker上,从而实现任务的并发执行,
表现为client计算负载减轻,用户的等待时间减少。
对Client而言是task,对于Worker而言是job。

后记:
gearman的源码还是值得阅读的,对于设计高并发网络程序有些帮助,
其中的架构跟我现在项目中用的差不多,但是有一点感觉不错,
只有一个维护对应表的逻辑线程,并且尽量减少系统调用。
gearman的消息传递模式是一对一的,不能实现一对多,
一个client通过job server最后只能够到达一个worker上。
如果需要一对多,需要定义多个worker的function,依次向这些worker进行发送,非常的不方便。
这一点就不如ZeroMQ,ZeroMQ支持的模式很多,能够满足各种消息队列需求。
​
参考:
http://hqlong.com/2010/01/1222.html#more-1222
http://timyang.net/linux/gearman-monitor/
http://blog.s135.com/dips/
http://oddments.org/notes/GearmanOSCONTutorial2009.pdf

[SV]SystemVerilog状态机实现案例 本文介绍了SystemVerilog中状态机的实现方法。首先使用枚举类型定义状态(TOP_HIB、TOP_BG、TOP_LDO、TOP_NOR),然后通过三个主要任务实现状态机:1)格式化现态寄存器处理状态转换;2)描述状态转移条件,包括计时器和稳定时间判断;3)基于当前状态和输入信号确定次态。状态机在时钟边沿或复位时更新状态,实现了从休眠到正常工作状态的转换逻辑,包含电源稳定时间检测等关键功能。 阅读详情

相关推荐

FOC项目知识点总结三 | 完全搞懂 Clarke 与 Park 变换(附动图,仿真文件以及详细讲解数学推导过程)

本文目的,最终可以完整推算两种变换 Clarke 变换 首先先看我们需要用到的两种坐标系 1. 自然坐标系 abcabcabc 我们知道,通过三相逆变电路,我们可以画出一个自然坐标系 abcabcabc ,即三相电压的坐标系,通入的电流在这三轴坐标系中变化: 将三个矢量相加合并在一起就如下图所展现: 使用三个坐标轴来表示十分的麻烦与不直观,因为其是非正交的,于是乎我们想要将其转化成使用两个正交的坐标轴来表示,于是乎便有了 Clarke变换。 Clarke 变换的作用: 将基于三轴二维的定子静止坐标系的各

Wilson Huang的博客 3万+

gearman使用心得

本质上,gearman可以认为是一个分布式任务队列,client是生产者,worker则是消费者。gearman并不主动分发任务,而是由worker到它那里去取任务执行,所以它采用的是类似kafka的pull消费模式。

tlxamulet的博客 587

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2258

分布式框架-Gearman

特点Gearman是一个分布式应用程序框架,支持同步、异步任务处理,负载均衡以及跨语言调用。通过Gearman,在WEB应用中可以将复杂的业务逻辑交给其它更适合的机器或进程,甚至不同的语言处理。Gearman是分布式计算的神经中枢,它具有以下特性:1.开源免费。Gearman有一个很活跃的开源社区,提供了比较丰富的资源。2.多语言支持。Gearman提供了多语言接口支持,可以...

weixin_33979203的博客 162

解决在封装自定义IP时加入ila,或者其他ip核时出错的情况

在查阅很多资料后,明白了这个应该是软件bug,但是最终还是解决了问题 我们只需要删除

weixin_42553916的博客 3604

ChatGPT高效制作PPT:从内容生成到设计优化全流程

人工智能技术正在改变传统办公文档的创作方式,其中自然语言处理(NLP)与生成式AI的结合为内容创作带来了革命性突破。以ChatGPT为代表的大语言模型(LLM)能够理解复杂指令并生成结构化内容,其核心原理是通过海量数据训练获得的语义理解和文本生成能力。在办公自动化场景中,这种技术特别适合解决PPT制作中的两大痛点:内容创作耗时和逻辑架构困难。通过精心设计的提示词工程,AI可以快速输出包含核心要点、数据支撑的完整内容框架,甚至直接生成Markdown格式的代码以便快速转换为PPT。对于商业计划、项目汇报等高频

weixin_42613018的博客 494

Gearman介绍、调研、测试与原理分析

gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。最初是2005年perl版本,2008年发布C/C++版本。目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本。PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档。 gearman架构中的三

大鹏 3212

C++ 核电站

问题描述 一个核电站有n个放核物质的坑,排列在一条直线上。如果连续m个坑中放入核物质就会发生爆炸,所以某些坑中不能放核物质。 本题的任务:对于给定的n和m,求不发生爆炸的放置核物质的方案总数。 输入格式 第一行两个正整数n和m,之间用一个空格隔开。2≤n≤50,2≤m≤5。 输出格式 一行一个正整数,表示方案总数。 输入样例 4 3 输出样例 13 数据规模与约定 2≤n≤50,2≤m≤5 CODE #include<bits/stdc++.h> using namespace

HybridCOW_HORSE的博客 1804

Gearman介绍、原理分析、实践改进

gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。最初是2005年perl版本,2008年发布C/C++版本。目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本。PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档。 gearman架构中的...

dianfu2892的博客 442

Ubuntu双系统引导修复实战:boot-repair工具详解

本文详细介绍了使用boot-repair工具修复Ubuntu双系统引导丢失问题的实战方法。当GRUB引导菜单因安装新系统或更新而损坏时,通过制作Ubuntu启动盘进入Live环境,安装并运行boot-repair,可一键完成系统修复引导,自动化执行GRUB重装与配置,解决无法进入Windows或Ubuntu的常见故障。

weixin_29224589的博客 358

别再踩坑了!QT5.15.2配置Android开发环境保姆级避坑指南(含Java8、SDK Tools版本选择)

本文提供QT5.15.2配置Android开发环境的详细避坑指南,重点解决版本锁定、SDK工具选择和QtCreator配置等常见问题。通过实测推荐的Java8、Android SDK Tools版本及NDK配置,帮助开发者高效完成环境搭建,避免隐性冲突和配置失败。

weixin_42537919的博客 239

Gearman-任务分发系统

简介 Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。 Gearman提供了一个通用的应用程序,可以工作在更加适合处理这项任务的其他计算机或其他处理器上。它允许并行处理,载入平衡处理,而且可以在不同语言间进行调用。它可以应用于各种各样的应用场合。 Gearman最初用于LiveJournal的图片resize功能,由于图片

zl 2710

如何成为一名高级数字 IC 设计工程师(6-7)数字 IC 验证篇:DEBUG 技巧

不懂验证的设计不是好的设计;UVM 验证思维是指导缜密的芯片设计的导师;推荐书籍《芯片验证漫游指南》。

新芯设计的博客 1605

gearman入门使用

一、简介 gearman是可以把工作委派到其它机器或进程的工具。 官网地址:http://gearman.org/ Gearman通常由三部分组成,client+worker+任务服务器,由worker执行client发来的job,再通过job server返回给client。Gearman提供了Client、Worker的API,利用这些API来与job server通讯。 这...

aa545785的博客 157

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

gearman简介及安装使用

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的任务分布非常简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面 Gearman分布式任务实现原理上只用到2个字段,f

chuanzhongdu1的专栏 1017

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Gearman使用简介

Gearman1月16日发布了c语言的0.2 版本,gearman提供了一个work传递其他机器,或者调用其他机器功能的框架,通过gearman你可以实现并行的工作,负载均衡处理,调用其他语言的函数。它可以应用在多种场合,从高可用性的web服务到数据库复制,换句话说,它是分布式处理的中枢神经。gearman早期是sixpart实现的perl语言开发的版本,名字来源于"Manager",这一框架

letian003的专栏 2931

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Gearman简介

 Gearman 系统用来把工作委派给其他机器,分布式的调用更适合做某项工作的机器,并发的做某项工作,在多个调用间做负载均衡,或用来在调用其它语言的函数。  通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService的方式来处理此类集成问题,但不管采用何种风格的 WebService,如 RPC 风格,或者 REST风格,其本身都有一定的复杂性。相比之下,G

March 647

Yii框架下搭建基于Gearman的异步Job

Gearman安装额外说明下,我实在Ubuntu OS上搭建的,没有在windows下搭建,其实开发工作,我觉得在linux环境下会更畅快些。Gearman 安装,运行以下脚本:安装: apt-get install gearman-job-server 运行: gearmand -d 默认启动的端口是4730,telnet一下,如果能通,则代表server已经正常启动了。Gearman PHP E

zoujunjie202的博客 1435

Gearman框架下java+php通信

在上一篇博客中,安装好Gearman和php客户端后,现在尝试下跨语言通信。 注:Gearman最强悍的地方就是它可以支持不同语言直接的交互,client端是一种语言,worker端可以是另外一种语言!中间的交互具体转化细节都封装在jobserver中处理。 这里演示的例子是:官网上面的字符串反转。 worker.php + client.java或 worker.java + clien

时刻保持危机感&对知识的渴望 4181

gearman 任务失败_Gearman简介-PHP中的多任务

gearman 任务失败How many times have you developed a web application that had some functionality which would benefit from running an external program or even forking a separate process? This is not somethi...

culi3118的博客 373

Gearman入门学习

Gearman协议 Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。

发粪涂墙的小毛驴的博客 715

Gearman的安装以及配置使用Gearman的PHP扩展环境

Gearman安装: 1、安装gearman的依赖库 yum install ‐y boost‐devel libuuid‐devel 安装gperf,没有的话需要导入安装包 yum install gperf‐3.0.3‐9.1.el6.x86_64.rpm 安装libevent,没有的话需要导入安装包 tar xf libevent-1.4.13-stable.tar.gz cd li...

qq_42762342的博客 1390

基于Gearman的PHP封装类

在多个jobs server时,PHP的gearman扩展在jobs server端口不通的情况下会自动检测出来,从而自动切换到另一个;但是在IP不通的情况下,就会出错了。 该封装解决了几个问题: 1、Jobs Server的IP如果突然不可达(例如机器关机),worker会自动重新添加jobs server(默认会报错然后worker终止); 2、添加jobs server时候只添加有效的

Linvo's blog 1434

在Linux上安装Gearman及配置使用Gearman的PHP扩展环境

在Linux上安装Gearman及配置使用Gearman的PHP扩展环境。 先介绍安装 Gearman 。 1. 先安装依赖库 # yum install -y boost-devel gperf libevent-devel libuuid-devel 2. 下载 Gearman 下载: # wget https://launchpad.net/gearmand/1.

iw1210的专栏 3601

gearman 入门使用笔记

一、简介gearman是可以把工作委派到其它机器或进程的工具。 官网地址:http://gearman.org/Gearman通常由三部分组成,client+worker+任务服务器,由worker执行client发来的job,再通过job server返回给client。Gearman提供了Client、Worker的API,利用这些API来与job server通讯。 这是工作原理图: 二

猿来这样-谢厂节的博客 1万+

gearman的安装

1 .安装gearmand服务 官网 访问官网:https://launchpad.net/gearmand 右侧下载 # wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz # tar -zxvf gearmand-1.1.12.tar.gz # cd gearmand-1.1.1...

不忘初心,才能始终 1649
上一篇: HttpClient 在Java项目中的使用详解
下一篇: gearman:从安装到python API测试
北雨南萍
北雨南萍 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 2665粉丝 453原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北雨南萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值