我有几个matlpotlib函数卷入了一些django-celery任务.
每次调用任务时,RAM都专用于python.不久之后,python占用了所有的RAM.
问题:我该如何释放这个记忆?
更新2 - 第二个解决方案:
我问过类似的问题,特别是有关内存锁定matplotlib错误的时候,但是我有一个很好的回答这个问题.clf()
,.close()
以及gc.collect()
如果使用多进程运行在单独的进程中绘图功能,其内存会自动释放不需要一旦过程结束.
Matplotlib错误导致内存泄漏.我怎样才能释放那段记忆?
更新 - 解决方案:
这些stackoverflow帖子建议我可以使用以下命令释放matplotlib对象使用的内存:
.clf()
:在循环中绘图时,Matplotlib内存不足
.close()
:Python matplotlib:指定图形大小时未释放内存
import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)
以下是我用来测试解决方案的示例:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import import figure, savefig
import numpy as np
import gc
a = np.arange(1000000)
b = np.random.randn(1000000)
fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)
fig.clf()
plt.close()
del a, b
gc.collect()
Run Code Online (Sandbox Code Playgroud) 我现在试图弄清楚如何从base64数据中恢复numpy数组.这个问题和答案表明它是可能的:在Python之外读取numpy数组但是没有给出一个例子.
以下面的代码为例,如果我知道dtype和数组的形状,如何从base64数据中获取Numpy数组?
import base64
import numpy as np
t = np.arange(25, dtype=np.float64)
s = base64.b64encode(t)
r = base64.decodestring(s)
q = ?????
Run Code Online (Sandbox Code Playgroud)
我想要一个python语句将q设置为dtype float64的numpy数组,因此结果是一个与t相同的数组.这是数组编码和解码的样子:
>>> t = np.arange(25,dtype=np.float64)
>>> t
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
22., 23., 24.])
>>> s=base64.b64encode(t)
>>> s
'AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEA='
>>> r = base64.decodestring(s)
>>> r
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x10@\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00\x18@\x00\x00\x00\x00\x00\x00\x1c@\x00\x00\x00\x00\x00\x00 @\x00\x00\x00\x00\x00\x00"@\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x00\x00\x00&@\x00\x00\x00\x00\x00\x00(@\x00\x00\x00\x00\x00\x00*@\x00\x00\x00\x00\x00\x00,@\x00\x00\x00\x00\x00\x00.@\x00\x00\x00\x00\x00\x000@\x00\x00\x00\x00\x00\x001@\x00\x00\x00\x00\x00\x002@\x00\x00\x00\x00\x00\x003@\x00\x00\x00\x00\x00\x004@\x00\x00\x00\x00\x00\x005@\x00\x00\x00\x00\x00\x006@\x00\x00\x00\x00\x00\x007@\x00\x00\x00\x00\x00\x008@'
>>> q = np.array( ????
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我正在开发一个项目,我想在一个由django驱动的应用程序中的MySQL数据库中存储很多Numpy数组.
使用这个django片段,我可以在文本字段中存储base64数据:http://djangosnippets.org/snippets/1669/ …
我正在尝试将mongodb用于时间序列数据库,并且想知道是否有人可以建议如何最好地为该场景设置它.
时间序列数据与股票价格历史非常相似.我收集了来自不同机器的各种传感器的数据集.有十亿个时间戳的值,我想问下面的问题(最好是从数据库而不是应用程序级别):
对于给定的一组传感器和时间间隔,我希望按时间顺序排列在该间隔内的所有时间戳和传感器值.假设所有传感器共享相同的时间戳(它们都是同时采样的).
对于给定的一组传感器和时间间隔,我希望按时间顺序排列在给定间隔内的每个第k项(时间戳和相应的传感器值).
有关如何最好地设置并实现查询的任何建议?
谢谢你的建议.
更新:这是一个很长的问题归结为,有人可以向我解释numpy数组类吗?我在下面回答了我自己的问题.
我正在开发一个项目,将数据从matlab导入到mysql数据库,其内容将通过django网站提供.我想使用Scipy.io.loadmat将matlab中的信息转换为我可以在python中使用的表单,以便我可以使用django api将数据输入到数据库中.
我的问题是我无法使用scipy.io.loadmat导入的数据.它以几个嵌套数组的形式加载,一些变量名似乎丢失了.
这是我为试验创建的测试结构的matlab代码:
sensors.time = [0:1:10].';
sensors.sensor1 = {};
sensors.sensor1.source_type = 'flight';
sensors.sensor1.source_name = 'flight-2';
sensors.sensor1.channels = {};
sensors.sensor1.channels.channel1.name = '1';
sensors.sensor1.channels.channel1.local_ori = 'lateral';
sensors.sensor1.channels.channel1.vehicle_ori = 'axial';
sensors.sensor1.channels.channel1.signals = {};
sensors.sensor1.channels.channel1.signals.signal1.filtered = 'N';
sensors.sensor1.channels.channel1.signals.signal1.filtered_description = 'none';
sensors.sensor1.channels.channel1.signals.signal1.data = sin(sensors.time)+0.1*rand(11,1);
>> sensors
time: [11x1 double]
sensor1: [1x1 struct]
>> sensors.sensor1
source_type: 'flight'
source_name: 'flight-2'
channels: [1x1 struct]
>> sensors.sensor1.channels
channel1: [1x1 struct]
>> sensors.sensor1.channels.channel1
name: '1'
local_ori: 'lateral'
vehicle_ori: 'axial'
signals: [1x1 struct]
>> sensors.sensor1.channels.channel1.signals
signal1: [1x1 struct]
>> …
Run Code Online (Sandbox Code Playgroud) 堆栈溢出有很多matplotlib colorbar问题,但我无法理解它们以解决我的问题.
如何在彩条上设置yticklabels?
这是一些示例代码:
from pylab import *
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
f = np.arange(0,101) # frequency
t = np.arange(11,245) # time
z = 20*np.sin(f**0.56)+22 # function
z = np.reshape(z,(1,max(f.shape))) # reshape the function
Z = z*np.ones((max(t.shape),1)) # make the single vector to a mxn matrix
T, F = meshgrid(f,t)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.pcolor(F,T,Z, norm=LogNorm(vmin=z.min(),vmax=z.max()))
plt.xlim((t.min(),t.max()))
mn=int(np.floor(Z.min())) # colorbar min value
mx=int(np.ceil(Z.max())) # colorbar max value
md=(mx-mn)/2 # colorbar midpoint value
cbar=plt.colorbar() # …
Run Code Online (Sandbox Code Playgroud) UDATE3:发现了这个问题.请参阅以下答案.
UPDATE2:似乎我可能通过manage.py shell运行djcelery教程来处理自动命名和相对导入问题,见下文.它仍然不适合我,但现在我收到新的日志错误消息.见下文.
更新:我在帖子的底部添加了日志.似乎示例任务没有注册?
原帖:
我想让django-芹菜起来跑步.我无法通过这个例子.
我成功安装了rabbitmq,并且没有遇到任何麻烦:http://www.rabbitmq.com/getstarted.html
然后我尝试通过djcelery教程.
当我运行时,python manage.py celeryd -l info
我收到消息:[任务] - app.module.add [2011-07-27 21:17:19,990:警告/主程序]芹菜@sequoia已经启动.
所以看起来不错.我把它放在我的设置文件的顶部:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
Run Code Online (Sandbox Code Playgroud)
将这些添加到我安装的应用中:
'djcelery',
Run Code Online (Sandbox Code Playgroud)
这是我的app的tasks文件夹中的tasks.py文件:
from celery.task import task
@task()
def add(x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
我把它添加到我的django.wsgi文件中:
os.environ["CELERY_LOADER"] = "django"
Run Code Online (Sandbox Code Playgroud)
然后我在命令行输入了这个:
>>> from app.module.tasks import add
>>> result = add.delay(4,4)
>>> result
(AsyncResult: 7auathu945gry48- a bunch of stuff) …
Run Code Online (Sandbox Code Playgroud) 我正在运行包含matplotlib的django应用程序,并允许用户指定图形的轴.这可能导致'溢出错误:超出Agg复杂度'
当发生这种情况时,高达100MB的RAM被捆绑起来.通常我使用fig.gcf()
,, plot.close()
和释放内存gc.collect()
,但与错误相关的内存似乎与绘图对象无关.
有谁知道我怎么能释放那个记忆?
谢谢.
这是一些代码,它给出了Agg Complexity Error.
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import gc
a = np.arange(1000000)
b = np.random.randn(1000000)
fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)
fig.savefig('yourdesktop/random.png') # code gives me an error here
fig.clf() # normally I use these lines to release the memory
plt.close()
del a, b
gc.collect()
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用xlwt从我的django站点上的数据库内容创建MS-Excel文件.
我在stackoverflow上看到了几个解决方案,特别是这个链接:django excel xlwt
和这个django片段:http://djangosnippets.org/snippets/2233/
这些示例适用于Firefox,但不适用于Internet Explorer.屏幕上出现了一堆蜿蜒的垃圾,而不是被提示打开或保存文件.似乎IE认为响应是html.
这是我的视图功能:
def exportexcel(request):
from xlwt import Workbook
wb = Workbook()
ws = wb.add_sheet('Sheetname')
ws.write(0, 0, 'Firstname')
ws.write(0, 1, 'Surname')
ws.write(1, 0, 'Hans')
ws.write(1, 1, 'Muster')
fname = 'testfile.xls'
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
wb.save(response)
return response
Run Code Online (Sandbox Code Playgroud)
我在IE 8中看到了这种行为.
有关为什么这在Internet Explorer中不起作用的任何建议?
谢谢.
Django Celery文档建议我可以检查URL以获取任务的状态.这些网址是什么?
为什么Windows上没有WSGIDaemonProcess?
您好我正在尝试将不同的网址从我的网站传递到模板中.
我以为可以通过在模板中使用它来完成
{% url myappname.module.views.urlfunction %}
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误,说"渲染时出现了陷阱:'str'对象没有属性'正则表达式'"
我不确定这意味着什么.我在django模板中按照这个示例url模板标记
urlpatterns = patterns('',
url(r'^$', 'myappname.module.views.start'),
Run Code Online (Sandbox Code Playgroud)
这就是我在模板中输入的内容
{% url myappname.module.views.start %}
Run Code Online (Sandbox Code Playgroud)
我也试过这个url模式和模板组合到没有avial:
urlpatterns = patterns('',
url(r'^$', 'myappname.module.views.start', name="home"),
{% url "home" %}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢.
我正在尝试用pip安装ObsPy.
以下cc命令的安装失败:
cc -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib build/temp.macosx-10.8-x86_64-2.7/obspy/taup/src/emdlv.o build/temp.macosx-10.8-x86_64-2.7/obspy/taup/src/libtau.o build/temp.macosx-10.8-x86_64-2.7/obspy/taup/src/ttimes_subrout.o -lgfortran -o build/lib.macosx-10.8-x86_64-2.7/obspy/lib/libtaup.so
ld: library not found for -lgfortran
Run Code Online (Sandbox Code Playgroud)
这个问题类似:lgfortran没有找到,但解决方案是改变makefile.在取消pip安装时我不知道该怎么做.我用自制软件安装了gfortran.
有没有办法可以将符号链接放在此命令搜索位置的现有gfortran lib文件夹中?
那个位置会/usr/local/lib
吗?
是的,听起来过于复杂.
我正在尝试从内部网上的页面中挖掘数据.页面是安全的.当我尝试使用urllib.urlopen()获取内容时,连接被拒绝.
因此,我想使用python打开Web浏览器打开该站点,然后单击一些链接,触发包含我想要收集的信息表的javascript弹出窗口.
有关从哪里开始的任何建议?
我知道页面的格式.它是这样的:
<div id="list">
<ul id="list item">
<li><a onclict="Openpopup('1');">blah</a></li>
</ul>
<ul></ul>
etc
Run Code Online (Sandbox Code Playgroud)
然后隐藏的框架变得可见,并且表格中的字段被填充.
<div>
<table>
<tr><td><span id="info_i_want">...
Run Code Online (Sandbox Code Playgroud)