5

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)
4

2 に答える 2

0

プロトコル構成で有効にする必要があります。http://rpyc.readthedocs.org/en/latest/api/core_protocol.html#rpyc.core.protocol.DEFAULT_CONFIGを参照してください。

于 2014-11-13T09:28:28.947 に答える