小编eri*_*ora的帖子

在python中的进程之间共享连续的numpy数组

虽然我找到了类似于我的问题的许多答案,但我不相信它已经直接在这里解决了 - 我还有几个问题.共享连续numpy数组的动机如下:

  • 我正在使用在Caffe上运行的卷积神经网络对一系列连续值标签执行图像回归.
  • 图像需要特定的预处理和数据增强.
  • 约束(1)标签的连续性(它们是浮点数)和(2)数据扩充意味着我在python中预处理数据,然后使用内存数据将其作为连续的numpy数组提供Caffe中的一层.
  • 将训练数据加载到内存中相对较慢.我想将它并行化,以便:

(1)我正在编写的python创建了一个"数据处理程序"类,它实例化了两个连续的numpy数组.(2)工作进程在这些numpy数组之间交替,从磁盘加载数据,执行预处理,以及将数据插入numpy数组.(3)同时,python Caffe包装器将数据从另一个阵列发送到GPU以通过网络运行.

我有几个问题:

  1. 是否有可能在连续的numpy数组中分配内存然后将它包装在共享内存对象中(我不确定'对象'是否是正确的术语)使用类似python多处理的Array类?

  2. Numpy数组有一个.ctypes属性,我认为这对于从Array()实例化共享内存数组很有用,但似乎无法确切地确定如何使用它们.

  3. 如果在没有 numpy数组的情况下实例化共享内存,它是否保持连续?如果没有,有没有办法确保它保持连续?

有可能做这样的事情:

import numpy as np
from multiprocessing import Array
contArr = np.ascontiguousarray(np.zeros((n_images, n_channels, img_height, img_width)), dtype=np.float32)
sm_contArr = Array(contArr.ctypes.?, contArr?)
Run Code Online (Sandbox Code Playgroud)

然后用实例化实例化

p.append(Process(target=some_worker_function, args=(data_to_load, sm_contArr)))
p.start()
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:我知道有许多库在不同的维护状态下具有类似的功能.我宁愿将此限制为纯python和numpy,但如果这不可能,我当然愿意使用它.

python numpy shared-memory multiprocessing caffe

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

Pycharm 不会自动创建文档存根

我不确定为什么会在这台计算机上发生这种情况;它从未发生在任何其他人身上。当我尝试为 pycharm 中的函数或类创建文档字符串时,没有任何反应。IE:

def foo(bar):
    """"""
    pass
Run Code Online (Sandbox Code Playgroud)

按回车键时应插入文档字符串;相反,它只是:

def foo(bar):
    """
    """
    pass
Run Code Online (Sandbox Code Playgroud)

python pycharm

9
推荐指数
4
解决办法
3285
查看次数

授予 Flask 错误处理程序访问请求的权限

我正在尝试在 Flask 中创建一个自定义错误页面,并且我想让错误处理程序访问生成导致错误的 API 调用的请求,以便它返回的错误页面可以根据情况进行更改。例如,假设有两个端点:

(1)@app.route('/get_item')

(2)@app.route('/submit_item')

如果在调用 期间发生错误get_item,我想显示某个错误页面(“抱歉,发生错误...”)但是,如果在调用 期间发生错误submit_item,我希望它显示更多信息,例如:

“发生错误!请联系我们。

您的用户名:request.json['userid']

您的提交ID:request.json['submission']

是否可以允许错误处理程序访问此内容,或者我只需包装整个submit_itemin try/except语句?

python error-handling flask

6
推荐指数
2
解决办法
3500
查看次数

Tensorflow的QueueBase.enqueue_many是否保留了跨线程的顺序?

假设两个线程同时尝试将每个N个张量排入FIFOQueue的实例中.即,他们正在打电话

queue_instance.enqueue_many(T)哪里T是长度的张量列表N.

让我们来标记每个张量从第一线为T1_1T1_N,并T2_1T2_N第二个线程.完成所有操作后(两个调用enqueue_many都已完成),是否会保留订单?即,队列中是否包含[T1_1, ..., T1_N, T2_1, ..., T2_N][T2_1, ..., T2_N, T1_1, ..., T1_N]?或者张量可以以交错方式排列,即[T2_1, T2_2, T1_1, T2_3, T1_2, ...]?或者,我想,第三种选择是没有任何押韵或理由:张量以任意顺序排列.

python queue multithreading tensorflow

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

Python的time.sleep()方法等待不正确的时间

我曾经遇到过这个问题几次; 重启python似乎工作(或ipython).但是,例如,这是运行以下代码的一种可能输出:

startt = time.time()
for i in range(4):
    time.sleep(1)
    print '%.3f'%(time.time()-startt)
Run Code Online (Sandbox Code Playgroud)

我获得:

9.989
10.989
11.990
12.991
Run Code Online (Sandbox Code Playgroud)

为什么它在开始工作之前等待这么久?偶尔,它会在我运行命令后的10秒甚至11秒开始.

我使用的是Mac OS X(Mavericks),IPython 1.2.1(使用pylab),Python 2.7.5

我正在导入:os,cv2,time,random,Quartz,LaunchServies,pdb,sys,appscript和numpy.

python time

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