rpyc
サービス内で multiprocessing パッケージを使用しようとしてValueError: pickling is disabled
いますが、クライアントから公開された関数を呼び出そうとすると取得されます。multiprocesing
パッケージが酸洗いを使用してプロセス間で情報を渡すこと、およびrpyc
安全でないプロトコルであるため酸洗いが許可されていないことを理解しています。したがって、rpycでマルチプロセッシングを使用するための最良の方法(またはとにかくある場合)がわかりません。rpyc サービス内でマルチプロセッシングを利用するにはどうすればよいですか? サーバー側のコードは次のとおりです。
import rpyc
from multiprocessing import Pool
class MyService(rpyc.Service):
def exposed_RemotePool(self, function, arglist):
pool = Pool(processes = 8)
result = pool.map(function, arglist)
pool.close()
return result
if __name__ == "__main__":
from rpyc.utils.server import ThreadedServer
t = ThreadedServer(MyService, port = 18861)
t.start()
エラーを生成するクライアント側のコードは次のとおりです。
import rpyc
def square(x):
return x*x
c = rpyc.connect("localhost", 18861)
result = c.root.exposed_RemotePool(square, [1,2,3,4])
print(result)