Вилка и выход в Python - PullRequest
       9

Вилка и выход в Python

0 голосов
/ 28 июля 2010

Этот код должен попытаться запустить серверный процесс и вернуться.Если порт был занят, он должен сказать «не может связаться с этим портом» и вернуться.Если сервер запущен, он должен вывести «Bound to port 51231» и вернуться.Но он не возвращается.

import socket
from multiprocessing import Process

def serverMainLoop(s,t):
    s.listen(5)
    while 1:
        pass # server goes here

host = ''
port = 51231
so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    so.bind((host,port))
    print "Bound to port %i"%port
    serverProcess = Process(target=serverMainloop, args=(so,60))
    serverProcess.start()
    sys.exit()
except socket.error, (value,message):
    if value==98:
        print "couldn't bind to that port"
    sys.exit()

Есть ли какой-то переключатель, который я могу включить, который заставит многопроцессорную работу позволить мне сделать это?

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

Проверьте на этой странице, она описывает, как использовать os.fork() и os._exit(1) для создания демона, который разветвляется на фон.

Прототип того, что вы, возможно, захотите, будет:

pid = os.fork()
if (pid == 0): # The first child.
   os.chdir("/")
   os.setsid()
   os.umask(0) 
   pid2 = os.fork() 
   if (pid2 == 0):  # Second child
     # YOUR CODE HERE
   else:
     sys.exit()    #First child exists
else:           # Parent Code
  sys.exit()   # Parent exists

По причине, почему нужно дважды разветвляться см. Этот Вопрос (короткая версия: необходимо осиротить ребенка и сделать его дочерним процессом init)

1 голос
/ 28 июля 2010

Чтобы сделать то, что вы описываете, я бы не использовал многопроцессорность, я бы хотел написать демон .

0 голосов
/ 28 июля 2010

В качестве альтернативы написанию демона, просто напишите свою программу как консольный процесс (тестирование как таковое) и используйте приложение управления службами, такое как supervisord , чтобы запустить его как службу.Supervisord также делает гораздо больше, чем просто запускает вашу программу как сервис.Он будет отслеживать, перезагружать, регистрировать, сообщать о состоянии и изменениях состояния и даже предоставлять минимальный веб-интерфейс для управления процессом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...