2017-04-09 3 views
4

ポートをリッスンしてクライアントから要求を取得するには、以下のpythonスクリプト(server.py)があります。私は別のpythonファイル(Main.py)からこのスクリプトを呼び出しています。私の要件は、特定の時間が経過した後にserver.pyの実行を停止することです。私はファイルの最後の行にexit()を使ってみました - server.pyサーバを停止してファイルの実行を止めることはできましたが、スクリプトの実行を停止できず、サーバは応答し続けました。私が間違っている場所を教えてくれる人は誰でも助けてくれますか?Pythonスクリプトの実行を停止します

Server.py

bind_ip = "127.0.0.1" 
bind_port = 2530 

def servercreate(): 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.bind((bind_ip,bind_port)) 
    server.listen(5) 

    while True: 
     client, addr = server.accept() 
     print('[*] Accepted connection from: %s:%d' % (addr[0], addr[1])) 
     client_handler = threading.Thread(target=handle_client, args=(client,)) 
     client_handler.start() 


def handle_client(client_socket): 
    request = client_socket.recv(2056) 
    print('[*] Received: %s' % request) 

    message = "{}" 
    client_socket.send(message.encode('utf-8')) 
    client_socket.close() 

if __name__ == '__main__': 
    servercreate() 

Main.py

import Server 
Server.servercreate() 
+0

まあ、迅速かつDIR 「client_handler.daemon = True'」(https://docs.python.org/3/library/threading.html#threading.Thread.daemon)を 'client_handler.start()'の前に設定してください。それほど強力ではない方法は、 'terminate'フラグをつけて、それを定期的にクライアントスレッドでチェックすることです。 – dhke

+0

こんにちは@水曜日、コメントありがとう。私はPythonプログラミングに慣れていないので、もっと具体的なロボットになれますか?ありがとう。 – mbvee

答えて

3

あなたは私が実行してからコードを停止すると考えている(あなたのコードがtime.sleepによって中断したくない場合は)、これを使用します:

import time 
timeout = time.time() + 10 

while True: 
    print ('hello') 
    if time.time() > timeout: 
     print ('program terminated') 
     break 

あなたは時間の使用の価値は10分必要な場合:

timeout = time.time() + 60*10 

をあなただけの一定の時間がtime.sleepは秒である

import time 

x=0 
while True: 
    print ('waiting 5') 
    time.sleep(5) 
    x += 1 
    if x == (10): 
     break 

のようなものを使用した後、プログラムの実行を停止する場合、ブレークがループを停止し、あなたのプログラム

更新を終了する必要があり、これを試してみてください。

import time 


bind_ip = "127.0.0.1" 
bind_port = 2530 

def servercreate(): 

    #put minutes of time you want program to run for below 
    minutes = 10 
    timeout = time.time() + (60*minutes) 

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.bind((bind_ip,bind_port)) 
    server.listen(5) 

    while True: 
     client, addr = server.accept() 
     print('[*] Accepted connection from: %s:%d' % (addr[0], addr[1])) 
     client_handler = threading.Thread(target=handle_client, args=(client,)) 
     client_handler.start() 
     if time.time() > timeout: 
      break 


def handle_client(client_socket): 
    request = client_socket.recv(2056) 
    print('[*] Received: %s' % request) 

    message = "{}" 
    client_socket.send(message.encode('utf-8')) 
    client_socket.close() 


if __name__ == '__main__': 
    servercreate() 
+0

こんにちは@new_to_coding、応答に感謝します。私は次の方法でコード内の最初のオプションを使用しました。しかし、それは動作しませんでした。 '__name__ == '__main__' であれば: servercreate() time.sleep(5) X + = 1 プリント(X) 場合のx == 10: break' – mbvee

+0

真一方、X = 0 @Viman私はあなたのプログラムを10分より多くまたは少なく実行したい場合は、提案を使って更新し、試してみて、それがうまくいくかどうかを確認してください。 – citizen2077

+0

ありがとうnew_to_coding。それは完璧に働いた。 – mbvee

関連する問題