2013-07-23 35 views
0

我正在使用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 

和當然它掛在那裏。

+0

試圖在服務器上調用.close()ru​​n_sv年底前? –

+0

服務器確實傾向於無限期運行,您應該在客戶端完成其工作 – nio

+0

no close()方法後找到一種方法來解決它。服務器開始聆聽並且不會提供「promt」。使用terminate()終止進程pid是一種選擇,但不是優雅。 – danizgod

回答

1

試試這個:

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

謝謝,我以爲我曾試過,但當時沒有工作。奇怪... – danizgod

+0

它掛在主流程中等待客戶端還是服務器那個時間? – nio

相關問題