2015-02-11 54 views
0

在我的python程序中,我试图用rpyc库作为一个单独的进程启动服务器。只要我这样做,我想能够连接到该服务器。由于启动过程需要一些时间,我需要延迟连接。我需要一些关于如何做到这一点的最佳方法的建议。启动一个服务器进程,并尽快连接到它

目前我在启动过程后使用time.sleep(10)。假设10秒钟就足以让服务器进程启动并准备好接受请求。这绝对不是万无一失的。

+1

重复? [在Python中的多个进程同步](https://stackoverflow.com/questions/16654908/synchronization-across-multiple-processes-in-python)在另一个笔记,如果你有一个'redis'数据库躺在那么使用'阻塞'列表'弹出'命令也可以使用。 [BLPOP](http://redis.io/commands/blpop)。也是在他们之间传递信息的简单方法。只是一个想法。 – 2015-02-11 10:49:07

回答

0

您可能想使用齿轮手。在这里,您可以将工作人员绑定在特定的端口上作为服务器进程。并向gearman客户请求。

由于Gearman的工人会假装守护进程,一旦收到请求时,它会立即回应:

的Gearman工作者(服务器为你):

import gearman 

def check_request_status(job_request): 
    if job_request.complete: 
     print "Job %s finished! Result: %s - %s" % (job_request.job.unique, job_request.state, job_request.result) 
    elif job_request.timed_out: 
     print "Job %s timed out!" % job_request.unique 
    elif job_request.state == JOB_UNKNOWN: 
     print "Job %s connection failed!" % job_request.unique 

gm_client = gearman.GearmanClient(['localhost:4730']) 

completed_job_request = gm_client.submit_job("reverse", "Hello World!") 
check_request_status(completed_job_request) 

Gearman的客户:

import gearman 

gm_worker = gearman.GearmanWorker(['localhost:4730']) 

def task_listener_reverse(gearman_worker, gearman_job): 
    print 'Reversing string: ' + gearman_job.data 
    return gearman_job.data[::-1] 

# gm_worker.set_client_id is optional 
gm_worker.set_client_id('python-worker') 
gm_worker.register_task('reverse', task_listener_reverse) 

# Enter our work loop and call gm_worker.after_poll() after each time we timeout/see socket activity 
gm_worker.work()