我正在使用tftpy,需要創建一個服務器,然後客戶端下載/上傳一些文件,然後我可以關閉服務器。在同一個文件中運行服務器和客戶端 - python
我想使用多處理來實現這一點,但我不知道如何優雅地關閉服務器。最後的手段是使用終止(),但也許有一個更好的方法(也許更容易不使用多處理)。我也知道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」。使用terminate()終止進程pid是一種選擇,但不是優雅。 – danizgod