小编roo*_*-11的帖子

IPython:如何有选择地安全地擦除IPython的历史记录?

我一直在学习如何使用该paramiko包只发现我在IPython中以纯文本形式存储的所有密码%hist.不太好.

因此,我需要摆脱存储内容的特定部分%hist.说,我不想抹去整个历史.- 只有我不小心打字的部分password =或类似的选择条款.

谢谢


评论我不需要:

  • %clear只清除会话.它没有抹去历史.
  • 是.从现在开始我只会使用xSA_keys.

ipython ipython-notebook

27
推荐指数
4
解决办法
1万
查看次数

如何将线程固定到具有预定内存池对象的核心?(80核Nehalem架构2Tb RAM)

在使用2Tb DRAM的80核(160HT)nehalem架构上运行一些测试后,我遇到了一个小的HPC问题:

当每个线程开始请求关于"错误"套接字上的对象的信息时,具有多于2个套接字的服务器开始停顿很多(延迟),即请求来自正在处理一个套接字上的某些对象的线程以提取信息这实际上是在另一个插槽上的DRAM中.

即使我知道他们正在等待远程套接字返回请求,核心也会100%被利用.

由于大多数代码以异步方式运行,因此重写代码要容易得多,因此我只需解析来自一个套接字上的线程的消息就可以解析其他代码(没有锁定等待).另外我想将每个线程锁定到内存池,因此我可以更新对象而不是浪费时间(~30%)在垃圾收集器上.

因此问题是:

如何在Python中使用预定的内存池对象将线程固定到核心?

更多背景:

当你把ZeroMQ放在中间并且在每个ZMQworker管理的内存池之间传递消息时,Python运行多核没有问题.在ZMQ的8M msg /秒时,对象的内部更新需要比管道填充更长的时间.这一切都在这里描述:http://zguide.zeromq.org/page:all # Chapter-Sockets-and-Patterns

因此,稍微过度简化,我会生成80个ZMQworkerprocesses和1个ZMQrouter,并使用大量对象加载上下文(实际上是5.84亿个对象).从这个"起始点"开始,对象需要进行交互以完成计算.

这是个主意:

  • 如果"对象X"需要与"对象Y"交互并且在python-thread的本地内存池中可用,则应该直接进行交互.
  • 如果"对象Y"在同一个池中不可用,那么我希望它通过ZMQrouter发送消息,让路由器在稍后的某个时间点返回响应.我的架构是非阻塞的,所以在特定的python线程中继续发生的事情只是继续而不等待zmqRouters响应.即使对于同一套接字上但在不同核心上的对象,我宁愿不进行交互,因为我更喜欢干净的消息交换而不是让2个线程操作相同的内存对象.

要做到这一点,我需要知道:

  1. 如何确定给定python进程(线程)运行的套接字.
  2. 如何将特定套接字上的内存池分配给python进程(某些malloc限制或类似内容,以便内存池的总和不会将内存池从一个套接字推送到另一个套接字)
  3. 我没有想到的事情.

但是我无法在python文档中找到关于如何执行此操作的参考资料,并且在google上我必须搜索错误的内容.

更新:

关于"为什么在MPI架构上使用ZeroMQ?"的问题,请阅读主题:Spread vs MPI vs zeromq?由于我工作的应用程序被设计用于即使它在架构测试,其中MPI分布式部署更合适的.

更新2:

关于这个问题:

"如何在Python(3)中将线程固定到具有预定内存池的核心"答案在psutils中:

>>> import psutil
>>> psutil.cpu_count()
4
>>> p = psutil.Process()
>>> p.cpu_affinity()  # get
[0, 1, 2, 3]
>>> p.cpu_affinity([0])  # set; from now on, this process will run on CPU #0 only
>>> p.cpu_affinity()
[0]
>>>
>>> # reset affinity …
Run Code Online (Sandbox Code Playgroud)

python multithreading hpc threadpool ipython-parallel

14
推荐指数
1
解决办法
2930
查看次数

合并两个带有时间戳和队列长度的元组列表

问题: 我有两个包含需要合并的元组(每个由时间戳和队列长度组成)的列表:

L1 = [[0, 50], [7.75, 120], [10.25, 70], [17, 100], [20, 60]]

L2 = [[0, 80], [8, 120], [10, 85], [10.25, 80]]
Run Code Online (Sandbox Code Playgroud)

我需要一个merge(L1,L2)返回的函数:

[[ 0.00,  50+80 ],
 [ 7.75, 120+80 ],
 [ 8.00, 120+120],
 [10.00,  85+120],
 [10.25,  70+80 ],
 [17.00, 100+80 ],
 [20.00,  60+80 ]] # note
Run Code Online (Sandbox Code Playgroud)

[注意:我不需要60+80- 它只是表明添加了哪些值,结果是60+80= 140我需要的]

我从上面的输出中提取的是我反复:

  • V从不同时间戳的合并列表中弹出最小值(setwise union timestamps).
  • V从小于或等于的非时间戳列表中添加队列长度V.
  • ......直到V筋疲力尽.

我的问题: 我很确定heapq可以解决它,但无法理解如何使用heapq-module构建解决方案.

更多漫无边际的细节:

  1. 在第一步 - 从0.00到7.75,复合队列长度 …

python merge

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

Python.org上的课程教程

我试着用Python 3.3.0尝试一下.

http://docs.python.org/3/tutorial/classes.html上有一个包含以下代码的类示例:

class Bag:
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)
Run Code Online (Sandbox Code Playgroud)

首先我想知道它缺少Python3通常要求的对象类somename(object).

class Bag(object):
Run Code Online (Sandbox Code Playgroud)

其次,当我尝试运行它时,我收到以下错误消息:

>>> a=Bag
>>> a.add('23')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a.add('23')
TypeError: add() missing 1 required positional argument: 'x'
Run Code Online (Sandbox Code Playgroud)

WTF?

python class python-3.3

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