2017-07-30 6 views
1

マルチスレッドアプリケーションでは、rpyc.Connection.serve_all()をスレッドから呼び出すと、他のスレッドはすぐに接続を使用できません。RPyC serve_all接続へのアクセスをブロックする

私はserve_allが接続をブロックしていると考えています。他のスレッドはタイムアウトがあるときにしかアクセスできません。

このコードは、問題を再現する必要があり

サーバー:

#!/usr/bin/env python3 

import rpyc 
import rpyc.utils.server 
import threading 

class Service(rpyc.Service): 
    def on_connect(self): 
     print("New connection") 

    def on_disconnect(self): 
     print("Connection closed") 

    def exposed_get_status(self): 
     return "Test string" 

server = rpyc.utils.server.ThreadedServer(Service, port = 12345) 
t = threading.Thread(target = server.start) 
t.daemon = True 
t.start() 
t.join() 

クライアント:(クライアントから)

#!/usr/bin/env python3 

import rpyc 
import threading 
import datetime 

con = rpyc.connect('localhost',12345) 

def delayed(): 
    print("Time is up") 
    now = datetime.datetime.now() 
    print(con.root.get_status()) 
    print(str(datetime.datetime.now() - now)) 

timer = threading.Timer(10,delayed) 

print("Starting timer") 
timer.start() 
print("serving all") 
con.serve_all() 

出力例:私は

$ python3 testrpyc.py 
Starting timer 
serving all 
Time is up 
Test string 
0:01:30.064087 

RPyCを使用して3。 pipでインストールされたPython 3.5.4rc1(debian sid)の4.3。

私はserve_allを悪用していると思いますが、ドキュメントで何も見つかりません。

答えて

0

(自分自身に答える)

私はgithubの上issueを開いて、これは正常なようです。解決方法は、任意のリソースの単一スレッドでIOを実行することです。

関連する問題