我想创建一个具有abc.ABCMeta元类的类,并且与Python 2.7和Python 3.5兼容.到目前为止,我只能在2.7或3.5上成功实现这一点 - 但从不同时在两个版本上.有人可以帮我一把吗?
Python 2.7:
import abc
class SomeAbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do_something(self):
pass
Run Code Online (Sandbox Code Playgroud)
Python 3.5:
import abc
class SomeAbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def do_something(self):
pass
Run Code Online (Sandbox Code Playgroud)
如果我们使用合适版本的Python解释器(Python 2.7 - >示例1,Python 3.5 - >示例2)运行以下测试,则它在以下两种情况下都会成功:
import unittest
class SomeAbstractClassTestCase(unittest.TestCase):
def test_do_something_raises_exception(self):
with self.assertRaises(TypeError) as error:
processor = SomeAbstractClass()
msg = str(error.exception)
expected_msg = "Can't instantiate abstract class SomeAbstractClass with abstract methods do_something"
self.assertEqual(msg, expected_msg)
Run Code Online (Sandbox Code Playgroud)
在使用Python 3.5运行测试时,预期的行为不会发生(TypeError在实例化时不会引发SomeAbstractClass):
======================================================================
FAIL: test_do_something_raises_exception (__main__.SomeAbstractClassTestCase)
----------------------------------------------------------------------
Traceback …Run Code Online (Sandbox Code Playgroud) 我们希望降低在 GCP Dataflow 中运行特定 Apache Beam 管道 (Python SDK) 的成本。
我们构建了一个内存密集型 Apache Beam 管道,它需要大约 8.5 GB 的 RAM 才能在每个执行程序上运行。一个大型机器学习模型目前以一种转换DoFn.setup方法加载,因此我们可以为数百万用户预先计算推荐。
现有 GCP Compute Engine 机器类型的内存/vCPU 比率低于我们的要求(每个 vCPU 最多 8GB RAM)或更高的比例(每个 vCPU 24GB RAM):https : //cloud.google.com/compute/文档/机器类型#machine_type_comparison
我们已使用 GCPm1-ultramem-40机器类型成功运行此管道。然而,硬件使用——因此,成本——是次优的。此机器类型的比率为每个 vCPU 24 GB RAM。当使用它来运行上述管道时,虚拟机使用了不到 36% 的可用内存——但是,正如预期的那样,我们为此付出了全部。
尝试使用custom-2-13312机器类型(2 个 vCPU 和 13 GB RAM)运行相同的管道时,Dataflow 崩溃,并显示错误:
Root cause: The worker lost contact with the service.
Run Code Online (Sandbox Code Playgroud)
在监控运行 Dataflow 作业的 Compute Engine 实例时,很明显它们的内存不足。Dataflow 尝试将模型加载到内存中两次——每个 vCPU 一次——但可用内存仅够一个。
如果我们能够通知 Apache Beam/Dataflow 特定转换需要特定数量的内存,那么问题就会得到解决。但是我们没有设法找到实现这一目标的方法。
我们能想到的另一个解决方案是尝试更改每个 …