Я использую 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
и конечно, там висит.
пытался дозвониться .close() на сервере до конца run_sv? Серверы –
имеют тенденцию работать неограниченно долго, вы должны найти способ, как это сделать после того, как клиент выполнил свою работу. – nio
no close(). сервер начинает слушать и не возвращает «promt». Прекращение процесса pid с terminate() является альтернативой, но не является изящным. – danizgod