2013-07-23 3 views
0

Я использую tftpy и вам нужно создать сервер, а затем клиент, чтобы загрузить/загрузить файл, а затем я могу закрыть сервер.Запуск сервера и клиента в том же файле - python

Я думал об использовании многопроцессорности, чтобы выполнить это, но я не знаю, как закрыть сервер изящно. Последнее средство будет использовать terminate(), но, возможно, есть лучший метод (возможно, более простой, не использующий многопроцессорность). Я также знаю о multiprocessing.Event(), но я не знаю, как метод run_sv() будет продолжать слушать

Вот код:

import multiprocessing 
import tftpy 

def run_sv(): 
    name = multiprocessing.current_process().name 
    print name, 'Starting sv' 
    server = tftpy.TftpServer('./rootf') 
    server.listen('0.0.0.0', 69) 
    print name, 'Exiting sv' 

def run_cl(): 
    name = multiprocessing.current_process().name 
    print name, 'Starting cl' 
    client = tftpy.TftpClient('127.0.0.1', 69) 
    client.download('aaa.txt', './downf/zzz.txt') 
    print name, 'Exiting cl' 

if __name__ == '__main__': 
    service = multiprocessing.Process(name='my_sv', target=run_sv) 
    worker_1 = multiprocessing.Process(name='my_cl', target=run_cl) 

    service.start() 
    worker_1.start() 

Выход:

my_sv Starting sv 
my_cl Starting cl 
my_cl Exiting cl 

и конечно, там висит.

+0

пытался дозвониться .close() на сервере до конца run_sv? Серверы –

+0

имеют тенденцию работать неограниченно долго, вы должны найти способ, как это сделать после того, как клиент выполнил свою работу. – nio

+0

no close(). сервер начинает слушать и не возвращает «promt». Прекращение процесса pid с terminate() является альтернативой, но не является изящным. – danizgod

ответ

1

Попробуйте это:

service.start() 
worker_1.start() 
worker_1.join() 
service.terminate() 
+0

Спасибо, думал, что я пробовал это, но не работал в то время. Strange ... – danizgod

+0

Завершился ли он в основном процессе в ожидании клиента или сервера в то время? – nio

Смежные вопросы