我有一个典型的场景,我想让两个不同的工作人员处于聆听模式(使用一些数据训练),并希望从不同的客户端打电话。
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()
如何管理此方案?如果不清楚,请告诉我。
答案 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