2012-01-05 50 views
0

我试图制作一个搜索引擎,在网络上运行。所以我使用mod_wsgi从python获取网页的查询。然后,我使用zeromq将查询发送给C++搜索程序。mod_wsgi和zeromq错误(python)

但问题是,它似乎zeromq和mod_wsgi不能一起工作。 这肯定是真的,蟒蛇可以导入ZMQ(我测试了它),但是当它运行在网络上,它显示错误消息(实际上是从Apache的错误日志)

File "D:/wsgi_app/wsgi_app.py", line 2, in <module>, referer: http://localhost/ 
     import zmq, referer: http://localhost/ 

File "D:\\util\\Python27\\lib\\site-packages\\zmq\\__init__.py", line 35, in <module>, referer: http://localhost/ 
     from zmq.utils import initthreads # initialize threads, referer: http://localhost/ 

ImportError: DLL load failed: \xc1\xf6\xc1\xa4\xb5\xc8 \xb8\xf0\xb5\xe2\xc0\xbb \xc3\xa3\xc0\xbb \xbc\xf6 \xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9., referer: http://localhost/ 

我不知道为什么WSGI不能导入zmq。顺便说下源是完整的Python代码

from cgi import parse_qs, escape 
import zmq 
def application(# It accepts two arguments: 
     # environ points to a dictionary containing CGI like environment variables 
     # which is filled by the server for each received request from the client 
     environ, 
     # start_response is a callback function supplied by the server 
     # which will be used to send the HTTP status and headers to the server 
     start_response): 

    # get a query from the webpage :) 
    data = parse_qs(environ['QUERY_STRING']) 

    query = data.get('query', [''])[0] 
    query = escape(query) #prevent script injection 

    context = zmq.Context() 
    socket = context.socket(zmq.REQ) 
    socket.connect ("tcp://localhost:5555") #connect to C++ search server database 
    socket.send (query) 

    # build the response body possibly using the environ dictionary 
    response_body = 'The request method was %s' % environ['REQUEST_METHOD'] 

    # HTTP response code and message 
    status = '200 OK' 

    # These are HTTP headers expected by the client. 
    # They must be wrapped as a list of tupled pairs: 
    # [(Header name, Header value)]. 
    response_headers = [('Content-Type', 'text/plain'), 
         ('Content-Length', str(len(response_body)))] 

    # Send them to the server using the supplied function 
    start_response(status, response_headers) 

    # Return the response body. 
    # Notice it is wrapped in a list although it could be any iterable. 
    return [response_body] 

回答

0

在你的WSGI脚本中,明确地添加你的依赖性的位置:

import site 
site.addsitedir(path_to_zeromq) 
+0

我这样做,但它并没有解决到问题.. – Jaebum 2012-01-06 01:10:21

+0

进口网站 site.addsitedir(“D:\\ util \\ Python27 \\ Lib \\ site-packages \\ zmq”) 我喜欢以上 – Jaebum 2012-01-06 01:11:41

+0

将zmq从您正在使用的路径末尾 – 2012-01-06 15:51:40