我了解在 concurrent.futures 模块中, ProcessPoolExecutor 子类使用 多处理 模块以生成多个进程。
是否可以在远程计算机上实现此并发?如果是,不同进程如何共享或分配内存?
在远程计算机上实现此多处理还有哪些其他挑战?
我尝试使用这种方法进行本地并发。我只想知道远程并发是否可以帮助我获得更好的性能。
答案 0 :(得分:2)
如果您有多台计算机可供使用,那么绝对可以通过使用它们来获得更好的性能。由于远程计算机的延迟和通信开销,这仅对较大的工作负载才有意义。
在行业中,诸如(Py)Spark和(Py)Mesos之类的工具更受欢迎。
您可以使用multiprocessing
,这是official documentation的示例:
运行以下命令可为单个共享创建服务器 排队哪些远程客户端可以访问:
>>> from multiprocessing.managers import BaseManager
>>> from queue import Queue
>>> queue = Queue()
>>> class QueueManager(BaseManager): pass
>>> QueueManager.register('get_queue', callable=lambda:queue)
>>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
>>> s = m.get_server()
>>> s.serve_forever()
一个客户端可以按以下方式访问服务器:
>>> from multiprocessing.managers import BaseManager
>>> class QueueManager(BaseManager): pass
>>> QueueManager.register('get_queue')
>>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
>>> m.connect()
>>> queue = m.get_queue()
>>> queue.put('hello')
另一个客户端也可以使用它:
>>> from multiprocessing.managers import BaseManager
>>> class QueueManager(BaseManager): pass
>>> QueueManager.register('get_queue')
>>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
>>> m.connect()
>>> queue = m.get_queue()
>>> queue.get()
'hello'