是否可以在同一个端口上运行两个不同的gearman客户端/ worker?

时间:2015-01-08 15:57:51

标签: python machine-learning gearman

我有一个典型的场景,我想让两个不同的工作人员处于聆听模式(使用一些数据训练),并希望从不同的客户端打电话。

for(100 times)
    w1 (listening) <- c1 will call 
    result1
    w2 (listening) <- c2 will call 
    result2
    compare (result1 and result2)

w1,w2是使用机器学习算法训练的,不同的数据因此需要时间来完成他们的过程。所以他们需要保持聆听模式,每次都无法忍受。

我试图在不同的端口4730和4731上运行它们。但我想它只适用于一个端口,4730。

客户:

class client_(object):
    def __init__(self):
        self.gm_client = gearman.GearmanClient(['localhost:4730'])    

    def callWorker(self, query):
        c_result = {}
        completed_job_request = self.gm_client.submit_job("db_worker", query)
        c_result =  completed_job_request.result
        c_result = json.loads(c_result)

工人:

def __init__(self):
    self.gm_worker = gearman.GearmanWorker(['localhost:4730'])
    self.gm_worker.register_task('db_worker', self.testClassifier)
    self.root_dir = os.getcwd()
    self.trainClassifier()

如何管理此方案?如果不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

您还必须运行gearmand服务器! 客户端/工作者库不能用于直接从客户端向工作人员发送消息。作业将发送到服务器,存储在内存中的队列中,并在可用时传递给相应的工作程序。

4730是gearmand服务器使用的默认端口。

您必须使用apt-get或https://launchpad.net/gearmand下载gearmand并启动它。 传递给客户端和worker的参数是服务器的主机名和端口。服务器使用传递给submit_job和register_task(在您的情况下为“db_worker”)的字符串来匹配作业和相应的worker。

这意味着您可以为两个工作人员使用相同的服务器和端口,只需要使用两个不同的函数名称注册它们。

您可以查看http://gearman.org/上的文档,但这很糟糕......在这里您可以找到下载和运行服务器的说明:http://gearman.org/getting-started