虽然我找到了类似于我的问题的许多答案,但我不相信它已经直接在这里解决了 - 我还有几个问题.共享连续numpy数组的动机如下:
(1)我正在编写的python创建了一个"数据处理程序"类,它实例化了两个连续的numpy数组.(2)工作进程在这些numpy数组之间交替,从磁盘加载数据,执行预处理,以及将数据插入numpy数组.(3)同时,python Caffe包装器将数据从另一个阵列发送到GPU以通过网络运行.
我有几个问题:
是否有可能在连续的numpy数组中分配内存然后将它包装在共享内存对象中(我不确定'对象'是否是正确的术语)使用类似python多处理的Array类?
Numpy数组有一个.ctypes属性,我认为这对于从Array()实例化共享内存数组很有用,但似乎无法确切地确定如何使用它们.
如果在没有 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,但如果这不可能,我当然愿意使用它.
我不确定为什么会在这台计算机上发生这种情况;它从未发生在任何其他人身上。当我尝试为 pycharm 中的函数或类创建文档字符串时,没有任何反应。IE:
def foo(bar):
""""""
pass
Run Code Online (Sandbox Code Playgroud)
按回车键时应插入文档字符串;相反,它只是:
def foo(bar):
"""
"""
pass
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 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语句?
假设两个线程同时尝试将每个N个张量排入FIFOQueue的实例中.即,他们正在打电话
queue_instance.enqueue_many(T)哪里T是长度的张量列表N.
让我们来标记每个张量从第一线为T1_1向T1_N,并T2_1以T2_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似乎工作(或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.