场景:
给定一组资源R:

给定一组线程T,它将并行运行:

每个线程都需要访问n个资源的列表.每个列表都是R的样本,这意味着每个资源在每个列表中都是唯一的:

但由于访问列表是随机采样的,因此可能存在冲突:

随机资源列表将在开始时初始化一次.之后,每个线程随后将对列表中的每个资源执行atomicAdd操作.每个列表中资源的访问顺序无关紧要.
题:
是否有一种算法可以对调度列表进行排序,从而最大限度地减少写入冲突的数量?所以最终结果如下:

到目前为止我的见解:
可能的方法:
我正在为这个问题寻找解决方案.它可能是完整的吗?如果是这种情况,我正在考虑设计一种遗传算法来解决这个问题.
编辑1:添加图表.
我们travis.yml看起来像这样:
language: python
python:
- "2.7"
env:
- "MONGO_URL=mongodb://localhost/"
services: mongodb
# command to install dependencies
install: "pip install -r requirements.txt"
# command to run tests
script: nosetests
Run Code Online (Sandbox Code Playgroud)
然后在带有测试的python脚本中,行
server.connect(os.environ['MONGO_URL'])
Run Code Online (Sandbox Code Playgroud)
抛出错误(缩短):
File "/home/travis/virtualenv/python2.7/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
Run Code Online (Sandbox Code Playgroud)
此错误仅发生在travis上.如果我们在本地运行它,它的工作没有问题.所以我们假设我们MONGO_URL以错误的方式设置环境变量.我们已经尝试过省略引号,但它没有帮助.
任何提示?我们使用travis-ci的免费云服务.
如果我输入pip freeze > requirements.txt,生成的文件看起来类似于:
argparse==1.2.1
h5py==2.2.0
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)
一些库正在持续开发中。这发生在我身上关于 h5py,它现在(在撰写本文时)版本可用2.2.1。因此,使用pip install -r requirements.txt会抛出错误,提示2.2.0找不到 h5py 版本:
No distributions matching the version for h5py==2.2.0 (from -r requirements.txt (line 2))
Run Code Online (Sandbox Code Playgroud)
维持需求是否被认为是良好实践pip freeze?显然,我不能依赖将来仍然可用的特定版本号。我希望将来部署我的应用程序,即使它们已经使用了几年,也不会出现版本号方面的兼容性问题。有没有办法让输出的pip freeze未来安全?
pip freeze我考虑过使用大于符号>=而不是等于符号来操作输出文件==,因此输出如下所示:
argparse>=1.2.1
h5py>=2.2.0
wsgiref>=0.1.2
Run Code Online (Sandbox Code Playgroud)
但我可以想象,如果任何库在未来版本中破坏了向后兼容性,这将破坏我的应用程序。
我想访问在子进程中运行的 python 程序的回溯。
文档说:
在新程序开始执行之前,子进程中引发的异常将在父进程中重新引发。此外,异常对象将有一个名为 child_traceback 的额外属性,它是一个字符串,包含从孩子的角度来看的回溯信息。
内容my_sub_program.py:
raise Exception("I am raised!")
Run Code Online (Sandbox Code Playgroud)
内容my_main_program.py:
import sys
import subprocess
try:
subprocess.check_output([sys.executable, "my_sub_program.py"])
except Exception as e:
print e.child_traceback
Run Code Online (Sandbox Code Playgroud)
如果我运行my_main_program.py,我会收到以下错误:
Traceback (most recent call last):
File "my_main_program.py", line 6, in <module>
print e.child_traceback
AttributeError: 'CalledProcessError' object has no attribute 'child_traceback'
Run Code Online (Sandbox Code Playgroud)
如何在不修改子流程程序代码的情况下访问子流程的回溯?这意味着,我想避免try/except在我的整个子程序代码周围添加一个大子句,而是从我的主程序中处理错误日志。
编辑: sys.executable应该可以用不同于运行主程序的解释器替换。
如何通过命令行或编程方式(尤其是通过或)更改pg_hba.conf设置?postgresql.conffabricfabtools
我已经找到了set_config,但这似乎不适用于需要重新启动服务器的参数。要更改的参数位于listen_addresses中postgresql.conf,新行位于 中pg_hba.conf,因此来自我们子网的连接将被接受。
这是使用 编写部署脚本所必需的fabric。复制模板文件然后覆盖现有文件不是一个选项*.conf,因为数据库服务器可能与带有自己的配置参数的其他应用程序共享。因此,现有的配置必须改变,而不是替换。
python ×3
algorithm ×1
deployment ×1
fabric ×1
nosetests ×1
pip ×1
postgresql ×1
sorting ×1
subprocess ×1
traceback ×1
travis-ci ×1