小编sch*_*eon的帖子

为多个线程排序资源访问计划,以便最大限度地减少写入冲突的数量

场景:

给定一组资源R: 资源集

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

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

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

随机资源列表将在开始时初始化一次.之后,每个线程随后将对列表中的每个资源执行atomicAdd操作.每个列表中资源的访问顺序无关紧要.

题:

是否有一种算法可以对调度列表进行排序,从而最大限度地减少写入冲突的数量?所以最终结果如下: 解决冲突

到目前为止我的见解:

  • 随机抽样对于算法的上下文很重要,因此不能以另一种方式初始化列表(只能改变它们的顺序).
  • 可以将整体时间表视为具有| T |的矩阵S. 行和n列,其中每个条目是R的元素.
  • 如果| T | <= | R |,可以解决没有任何冲突的问题.
  • 如果| T | == | R |,优化调度矩阵S的列是R的排列.
  • 如果| T | > | R |,优化调度矩阵中的并发访问的平均数应为| T |/| R |

可能的方法:

我正在为这个问题寻找解决方案.它可能是完整的吗?如果是这种情况,我正在考虑设计一种遗传算法来解决这个问题.

编辑1:添加图表.

sorting algorithm parallel-processing

8
推荐指数
1
解决办法
354
查看次数

如何在travis-ci中设置环境变量并从python脚本访问它们?

我们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的免费云服务.

python environment-variables nosetests travis-ci

7
推荐指数
1
解决办法
3159
查看次数

pip freeze 输出中的未来安全版本号

如果我输入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 deployment pip

7
推荐指数
1
解决办法
4725
查看次数

子进程子回溯

我想访问在子进程中运行的 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应该可以用不同于运行主程序的解释器替换。

python subprocess traceback

5
推荐指数
1
解决办法
1951
查看次数

从命令行或以编程方式更改配置参数

如何通过命令行或编程方式(尤其是通过或)更改pg_hba.conf设置?postgresql.conffabricfabtools

我已经找到了set_config,但这似乎不适用于需要重新启动服务器的参数。要更改的参数位于listen_addressespostgresql.conf,新行位于 中pg_hba.conf,因此来自我们子网的连接将被接受。

这是使用 编写部署脚本所必需的fabric。复制模板文件然后覆盖现有文件不是一个选项*.conf,因为数据库服务器可能与带有自己的配置参数的其他应用程序共享。因此,现有的配置必须改变,而不是替换。

postgresql fabric

3
推荐指数
1
解决办法
2011
查看次数