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

Is it possible to run two different gearman client/worker on same port?

我有一个典型的场景,我想将两个不同的工作人员置于监听模式(使用一些数据训练),并希望从不同的客户端调用。

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()

如何管理这种情况?如果不清楚,请告诉我。

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

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

您必须使用 apt-get 或从 https://launchpad.net/gearmand 下载 gearmand 并启动它。 您传递给客户端和工作人员的参数是服务器的主机名和端口。服务器使用传递给 submit_job 和 register_task(在您的例子中是 "db_worker")的字符串来匹配工作和相应的工作人员。

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

您可以在 http://gearman.org/ but it's pretty bad... Here you can find the instructions to download and run the server: http://gearman.org/getting-started

查看文档