2017-06-07 9 views
3

私は接続をリッスンし、クライアントの言うことに基づいてメソッドを呼び出すためのサーバーサイドアプリケーションを作成しようとしています。しかし、メソッドのアップロードを呼び出すと、mainの下でコードを実行し続けたいと思います。レスポンスを期待せずにメソッドを呼び出す

私はこれを達成することができますか、間違ったアプローチをとっていますか?以下のコード。

def main(ipAddr, tcpPort, bufferSize, s): 
    try: 
     s.bind((ipAddr, tcpPort)) 
     s.listen(4) 
     conn, addr = s.accept() 

    print("Connection attempt from: %s" % addr) 
    messageRecv = "" 
    while True: 
     data = conn.recv(bufferSize) 
     if not data: break 
     messageRecv = data.decode('utf-8') 
finally: 
    conn.close() 
    if messageRecv == "Ready": upload(addr) 

main(ipAddr, tcpPort, bufferSize, s) 



def upload(addr): 
    pass 
+1

私はマルチスレッドのプログラミングについて読むことをお勧めします:あなたのケースでは

は、あなたがこのようなものであってもよいです。あなたはこの[チュートリアル](https://www.tutorialspoint.com/python/python_multithreading.htm)を見ることができます –

+3

インデントを修正してください。 – Nurjan

+0

最近のPythonをお使いの方は、[asyncio'パッケージ](https://docs.python.org/3/library/asyncio.html)を見てみてください。古いバージョンのPythonでは、[Twisted](https://twistedmatrix.com/)を使用してください。 –

答えて

1

は、本質的に、Pythonの "マルチスレッド" パッケージですmultiprocessingモジュールを、使用することを検討してください。 APIはthreadingモジュールと非常によく似ていますが、threadingGILのために禁止されている可能性があります。

p = Process(target=upload, args=(addr,)) 
p.start() 
# some other code 
p.join() 
+1

私はこの回答をサポートしていますが、私はいつでも[gevent](http://www.gevent.org/)でマルチスレッド/マルチプロセスパラダイムの非常に軽い解決策を提案することをお勧めします。また、サーバー側でasyncIOに興味があれば[Tornado](http://www.tornadoweb.org/en/stable/0) – SRC

+1

Pythonのスレッドモジュールは非常に便利でネットワーキングはアプリケーションの代表的な例ですスレッディングのGILは、ほとんどのアプリケーションがCPUバウンドではなくI/Oバウンドであるため、多くのアプリケーションでは問題になりません。 –

+1

@SvenMarnach十分に公正。その声明はやや厳しいものだったと思います。 – arshajii

関連する問題