我最初认为这docker stop相当于vagrant halt,而且docker rm是vagrant destroy.
但从根本上说,docker容器是无状态的,除了VOLUME语句之外docker rm,如果没有调用,AFAIK甚至会保留目录内容-v.
那么区别是什么呢?
我的目标是为DataFrame获取唯一的哈希值.我从.csv文件中获取它.整点是每次调用hash()时获取相同的哈希值.
我的想法是我创建了这个功能
def _get_array_hash(arr):
arr_hashable = arr.values
arr_hashable.flags.writeable = False
hash_ = hash(arr_hashable.data)
return hash_
Run Code Online (Sandbox Code Playgroud)
即调用底层numpy数组,将其设置为不可变状态并获取缓冲区的哈希值.
INLINE UPD.
截至2016年11月8日,此版本的功能不再起作用.相反,你应该使用
hash(df.values.tobytes())
Run Code Online (Sandbox Code Playgroud)
内联UPD结束.
它适用于常规pandas数组:
In [12]: data = pd.DataFrame({'A': [0], 'B': [1]})
In [13]: _get_array_hash(data)
Out[13]: -5522125492475424165
In [14]: _get_array_hash(data)
Out[14]: -5522125492475424165
Run Code Online (Sandbox Code Playgroud)
但后来我尝试将它应用于从.csv文件中获取的DataFrame:
In [15]: fpath = 'foo/bar.csv'
In [16]: data_from_file = pd.read_csv(fpath)
In [17]: _get_array_hash(data_from_file)
Out[17]: 6997017925422497085
In [18]: _get_array_hash(data_from_file)
Out[18]: -7524466731745902730
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,这怎么可能?
我可以创建新的DataFrame,比如
new_data = pd.DataFrame(data=data_from_file.values,
columns=data_from_file.columns,
index=data_from_file.index)
Run Code Online (Sandbox Code Playgroud)
它再次有效
In [25]: _get_array_hash(new_data)
Out[25]: -3546154109803008241
In …Run Code Online (Sandbox Code Playgroud) 我之前为我的观点创建了一些测试。像那样
class TestUserRegistrationViewUserCreate(APITestCase):
def setUp(self):
self.factory = APIRequestFactory()
def test_create_user(self):
data = {
'phone_number': '+79513332211',
'password': 'qwerty'
}
request = self.factory.post(reverse('user'), data=data)
response = CustomUserAPIView.as_view()(request)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我被要求添加 API 版本控制。
DRF 支持本地版本控制http://www.django-rest-framework.org/api-guide/versioning/ 所以我只是使用它并将基于命名空间的版本控制添加到我的 API 中
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
Run Code Online (Sandbox Code Playgroud)
现在我需要重写我的视图单元测试以支持版本控制。
这个问题是,为了通过 获得版本化的 url reverse,我必须使用
from rest_framework.reverse import reverse
reverse('bookings-list', request=request)
Run Code Online (Sandbox Code Playgroud)
就像在文档中一样。
但是我request在测试中没有对象,因为我正在自己制作一个对象,并且需要制作它的版本化 url。
我该怎么办?
PS 我可以在不使用 DRF 的情况下实现版本控制,使用视图装饰器和几个 utils 函数来解决这个问题,但是当我重新发明轮子时,这对我来说感觉很糟糕。另外,我也可能会忘记一些边缘情况。
我正在尝试Dockerfile基于https://hub.docker.com/_/mongo/上的官方回购创建内存中的MongoDB .
在dockerfile-entrypoint.sh我遇到过:
numa='numactl --interleave=all'
if $numa true &> /dev/null; then
set -- $numa "$@"
fi
Run Code Online (Sandbox Code Playgroud)
基本上它存在numactl --interleave=all于原始docker命令之前numactl.
但我真的不明白这个NUMA政策的事情.你能否解释一下NUMA的真正含义,以及它--interleave=all代表什么?
为什么我们需要使用它来创建MongoDB实例?