rpyc
서비스 내에서 멀티 프로세싱 패키지를 사용하려고하지만 클라이언트에서 노출 된 함수를 호출하려고하면 ValueError: pickling is disabled
이 표시됩니다. multiprocesing
패키지는 절건을 사용하여 프로세스간에 정보를 전달하며 안전하지 않은 프로토콜이기 때문에 rpyc
에 절임이 허용되지 않음을 알고 있습니다. 그래서 rpyc로 다중 처리를 사용하는 것이 가장 좋은 방법인지 (또는 어쨌든 존재한다면) 확신 할 수 없다. rpyc 서비스 내에서 다중 처리를 사용하려면 어떻게해야합니까? 여기RPYC로 다중 처리 Python "ValueError : pickling is disabled"
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)
http://stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when -using-pythons-multiprocessing-pool-ma? rq = 1 –
개체는 일반적으로 절편 (단지 정수) 일 수 있지만 rpyc는 산세를 금지하고 산 세척을 사용하는 (겉으로보기에는) 다중 처리를 금지합니다. 새 프로토콜을 구현하지 않고 rpyc를 사용하려고합니다. 할 수 없다면 나는 다른 해결책을 찾겠지만 차라리 재발견하지 않겠다. 그렇게 할 수없는 경우 rpyc가 존재하는 이유, 즉 멀티 코어 컴퓨터에서 하나의 프로세서 만 사용할 수있는 경우 다른 컴퓨터를 사용하는 것이 무엇인지에 대해 분실했습니다. – Michael
네트워크 환경에서 멀티 스레딩을 쉽게 수행 할 수없는 많은 이유가 있습니다. 그 중 하나는 CPU 할당이 커널 내부에서 이루어지고 사용자 공간 스레드 라이브러리가이 기능을 사용하도록 요청할 수 있다는 것입니다. 그러나 항상 보장되는 것은 아닙니다. 그리고 이것은 잘 알려져 있습니다 : http://intermediate-and-advanced-software-carpentry.readthedocs.org/en/latest/multiprocessing.html (GIL은 단일 쓰레드만큼 빠르게 다중 쓰레드를 만들고 "전역"잠금은 단일 호스트). –