Запустите серверный процесс и подключитесь к нему как можно скорее
В моей программе на Python я пытаюсь использовать библиотеку rpyc для запуска сервера как отдельного процесса. Как только я это сделаю, я хочу подключиться к этому серверу. Поскольку для запуска процесса требуется некоторое время, мне нужно отложить подключение к нему. Мне нужны некоторые предложения о том, как лучше всего это сделать.
В настоящее время я использую time.sleep(10) после запуска процесса. Предполагается, что 10 секунд должно быть достаточно для запуска серверного процесса и подготовки к приему запросов. Это определенно не надежно.
1 ответ
Вы могли бы использовать 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()