python - 多处理模块如何提供远程并发?
问题描述
我知道在concurrent.futures模块中,ProcessPoolExecutor子类使用多处理模块来产生多个进程。
是否有可能在远程机器上实现这种并发?如果是,不同进程如何共享或分配内存?
在远程机器上实现这种多处理还有哪些其他挑战?
我已经尝试使用这种方法进行本地并发。我只想知道远程并发是否可以帮助我获得更好的性能。
解决方案
如果您有多台机器可供使用,那么绝对可以通过使用它们来获得更好的性能。由于远程机器的延迟和通信开销,它只对更大的工作负载有意义。
在行业中,像 (Py)Spark 和 (Py)Mesos 这样的工具更适合这项任务。
您可以使用multiprocessing
,这是官方文档中的示例:
运行以下命令为远程客户端可以访问的单个共享队列创建服务器:
>>> 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'
推荐阅读
- reactjs - 无法在 React Datepicker 上设置时间值
- rust - 如何将带有 BufReader 和 BufWriter 的 TcpStream 存储在数据结构中
- java - 如何在不使用 Java 中的 substring() 方法的情况下获取子字符串?
- php - Wordpress 自定义页面模板 Stripe 集成显示 - “PHP 致命错误:未捕获的错误:找不到类 'Stripe\Stripe'”错误”
- azure-bot-service - 如何在 Azure 机器人服务中添加机器人通道时修复“抱歉,出现问题”错误
- javascript - 动态更改 CSS 样式
- c - 如何使用 C 语言打开网址?
- c# - 我也想为其他按钮重用第一个按钮的样式块,我该怎么办?
- flutter - 将数据传递给滑块
- laravel - 代理查看路由的策略