gpt4 book ai didi

python - Apache 与 Django/Matplotlib 应用程序一起挂起

转载 作者:行者123 更新时间:2023-12-01 05:21:11 25 4
gpt4 key购买 nike

这里是新的 StackOverflow 用户。我需要有关 Apache 卡住问题的帮助。我在 Win 7 64 位上有一个 WAMPServer 设置,正在使用 python/django/mysql/mod_wsgi/matplotlib ,尝试动态渲染图像。我正在使用 Apache 来提供静态文件。

我正在尝试绘制 MySQL 数据库中的数据。我的views.py 文件如下。当我通过访问相应的网页来调用函数“view_Stats”时,它会调用“CreateFig”函数来创建 .png 文件并将其保存到随后由 Apache 提供服务的目录中。它最初工作正常,但在 Apache 挂起之前似乎最多可以对“CreateFig”函数进行 8 次调用。此时我必须重新启动 Apache,但它需要一段时间(几分钟)才能重新启动。

查看 Apache 错误日志(见下文)显示与 Apache 子进程相关的错误,需要 Apache 强制其终止。我怀疑存在某种内存泄漏/错误,但我对此还很陌生,无法很好地进行故障排除;我在 Google 上搜索了此内容,并在 StackOverflow 上四处查看,但没有任何乐趣。

如有任何帮助,我们将不胜感激!

[Tue Mar 11 17:01:07.550093 2014] [core:notice] [pid 2820:tid 404] AH00094: Command line: 'c:\\wamp\\bin\\apache\\apache2.4.4\\bin\\httpd.exe -d C:/wamp/bin/apache/Apache2.4.4'
[Tue Mar 11 17:01:07.551093 2014] [mpm_winnt:notice] [pid 2820:tid 404] AH00418: Parent: Created child process 3528
[Tue Mar 11 17:01:07.856093 2014] [mpm_winnt:notice] [pid 3528:tid 324] AH00354: Child: Starting 150 worker threads.
[Tue Mar 11 17:04:53.233893 2014] [mpm_winnt:notice] [pid 2820:tid 404] AH00422: Parent: Received shutdown signal -- Shutting down the server.
[Tue Mar 11 17:05:23.248293 2014] [mpm_winnt:notice] [pid 2820:tid 404] AH00431: Parent: Forcing termination of child process 3528

views.py 的代码如下:

from django.contrib import auth
from django.contrib.auth.models import User, Group
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
from django.http import Http404, HttpResponseRedirect

from rwjcnlab import settings
from clientele.models import UserProfile
from reports.models import EEG, LTM, EMU, AEEG

import os, datetime
import numpy
from pylab import *
import matplotlib.pyplot as plt; plt.rcdefaults()
import matplotlib.pyplot as plt
import gc


# CREATE VIEWS HERE
def view_Stats(request):
UID = UserProfile.objects.get(user_id = request.user.id)
StatsEEG, StatsLTM, StatsAEEG, StatsEMU, start_date = ReportNumbers(UID.id)

# Create figures
CreateFig(StatsEEG, 300, 50, 'EEG', 'b')
CreateFig(StatsLTM, 100, 10, 'LTM', 'r')
CreateFig(StatsAEEG, 15, 3, 'AEEG', 'y')
CreateFig(StatsEMU, 25, 5, 'EMU', 'c')

return render_to_response('view_Stats.html', {
'StatsEEG': StatsEEG,
'StatsLTM': StatsLTM,
'StatsAEEG': StatsAEEG,
'StatsEMU': StatsEMU,
'start_date': start_date,
'user': request.user,
})

def CreateFig(Stats, ymax, yinc, figname, c):
nAll = tuple(x[1] for x in Stats)
nUser = tuple(x[2] for x in Stats)
xlabels = tuple(x[0].strftime("%b%y") for x in Stats)

ind = numpy.arange(len(xlabels)-1.4,-0.4,-1) # the x locations for the groups
width = 0.8 # the width of the bars: can also be len(x) sequence

plt.ioff()
fig = plt.figure(figsize=(10, 5), dpi=72, facecolor='w', edgecolor='k')
p1 = plt.bar(ind, nAll[1:], width, color=c)
p2 = plt.bar(ind, nUser[1:], width, color='g')
plt.title(figname+' Volumes at RWJUH')
plt.xticks(ind+width/2., xlabels[1:])
plt.yticks(numpy.arange(0,ymax,yinc))
plt.legend( (p1[0], p2[0]), ('Total', 'User') )
plt.savefig(os.path.join(settings.BASE_DIR, 'static/'+figname+'.png'))

fig.clf()
plt.close(fig)
gc.collect()

return

最佳答案

这可能是因为您在使用 matplotlib 时尝试连接到(可能不存在)X 服务器。如果您的网络服务器上确实运行了 X,您可能仍然希望避免使用 matplotlib 的交互式后端

(编辑:刚刚看到您在 Windows 上。显然,这并不是 mattplotlib 在 Windows 上运行时尝试连接到 X 服务器,但我愿意打赌您的问题仍然与使用交互式后端和 matplotlib 尝试连接到图形显示有关。)

如果您想在没有交互式绘图的情况下使用 matplotlib(即不需要 X 服务器),那么您需要显式使用非交互式后端。 (例如Aggpdf等)

首先,删除 from pylab import *。出于多种原因,这是一个非常糟糕的主意(提示,minmax 并不是您想象的那样,等等)。另外,你似乎没有使用它。您已经通过 pyplot 接口(interface)访问 matplotlib 功能,并通过 numpy 命名空间访问 numpy 功能。

接下来,在执行 import matplotlib.pyplot as plt 之前(或者在执行 from pylab import * 之前,如果您决定不删除)它),做:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot # etc...

现在,每次创建新图形时,matplotlib 都不会尝试连接到 X 显示。

关于python - Apache 与 Django/Matplotlib 应用程序一起挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com