我正在使用Python中的Cherrypy
进行web开发。在
我有一个正常工作的网页没有错误,但是当我开始使用Mako
作为前端代码参数化它之后,会弹出以下错误消息。在
Python quit unexpectedly while using the libmysqlclient.18.dylib plug-in.
它还在控制台上抛出以下错误。在
^{pr2}$这看起来像是C编译器的错误,也许是MySQL造成的,但我不知道是什么错误。在
我能做什么?我猜也许我用错了MySQL,我附加了Python代码片段,我在其中连接MySQL数据库并使用它。在
dbdict = {}
for name in params["dashboards"]:
for chart in params["dashboards"][name]:
dbdict[chart["dbname"]] = None
def connect(thread_index):
for name in dbdict:
db = params["db"][name]
dbdict[name] = MySQLdb.connect(db["host"], db["user"], db["password"], db["dbname"])
cherrypy.engine.subscribe('start_thread', connect)
class AjaxApp(object):
@cherrypy.expose
@cherrypy.tools.mako(filename="index.html", directories=MEDIA_DIR)
def index(name=None):
return {'size': len(params["dashboards"]["first"])}
@cherrypy.expose
def submit_data(self, idx):
idx = int(idx)
chart = params["dashboards"]["first"][idx]
# Sample page that displays the number of records in "table"
# Open a cursor, using the DB connection for the current thread
c = dbdict[chart["dbname"]].cursor()
print 'query being executed......'
c.execute(chart["command"])
print 'query being fetched......'
res = c.fetchall()
c.close()
# construct a JSON object from query result
jsres = []
jsres.append(chart["selected"])
q_result = []
for x in res:
tmp_arr = []
for i in x:
if type(i) is datetime.datetime:
tmp_arr.append(str(i))
else:
tmp_arr.append(i)
q_result.append(tmp_arr)
jsres.append(q_result)
return json.dumps(jsres)
在这里,我连接到所有使用的dbs,并将它们放入python字典中,每当我运行查询命令时,我都会查找相应的db对象,并使用它进行查询。在
现在我的connect
函数如下所示
def connect(thread_index):
for name in dbdict:
print name
db = params["db"][name]
cherrypy.thread_data.db = MySQLdb.connect(db["host"], db["user"], db["password"], db["dbname"])
dbdict[name] = cherrypy.thread_data.db
我也有同样的错误。在
是的,这是你提到的C程序错误,可能是MYSQL造成的。该错误表示在程序的某个地方,您正在传递malloc/calloc/realloc动态调用未分配和接收的地址。free()需要malloc/calloc/realloc接收的内存。当free()调用时,内存管理器会对输入地址进行一些健全性检查,如果输入地址没有通过,则会抛出这样的错误消息并中止程序。在
在您的程序中,由于某种原因,错误的内存被传递给free()。现在很难从PHP/MYSQL代码中理解可能的原因。我建议你可以将你的程序附加到动态工具中,找出导致这个问题的原因。你可以参考我之前关于这篇文章的文章。在
https://stackoverflow.com/a/22658693/2724703
看起来您在多个线程之间共享一个连接(您为
connect()
函数中的每个db创建一个连接)。如果不是用C编写的,则可能会导致出现意外的同步问题。尝试将连接对象附加到cherrypy.thread_data
,如here所示。在以下是我的写作方法(未经测试):
然后在
^{pr2}$submit_data()
中:相关问题 更多 >
编程相关推荐