多处理模块如何提供远程并发?

时间:2019-05-17 14:03:50

标签: python python-3.x parallel-processing python-multiprocessing concurrent.futures

我了解在 concurrent.futures 模块中, ProcessPoolExecutor 子类使用 多处理 模块以生成多个进程。

是否可以在远程计算机上实现此并发?如果是,不同进程如何共享或分配内存?

在远程计算机上实现此多处理还有哪些其他挑战?

我尝试使用这种方法进行本地并发。我只想知道远程并发是否可以帮助我获得更好的性能。

1 个答案:

答案 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'