奇怪的虫子?网址“长”时截止日期超过

时间:2014-08-10 17:15:24

标签: google-app-engine python-2.7

我有一个带有URL的路由器,根据传递给query参数的内容,使用该查询执行urlfetch。

query的示例可以是:

  • php-mysql
  • desarrolladores-php-mysql
  • recepcionista-en-barcelona
  • recepcionista-hotel-turno-noche/2(查询:recepcionista-hotel-turno-noche;第2页)

我一直在经历一些非常奇怪的行为。当query很长(大约27个字符或更多)时,每当我尝试进入第二页时,都需要在dev_appserver上处理请求,并且在生产中遇到DeadlineExceededError。这很奇怪,因为我总是可以获取第一页,但在query很长之后永远不会获取第一页。

如果你查看我的路由器代码,我已经添加了" print"查看代码是否到达此部分,甚至在设置路由器之前。无论何时加载都需要很长时间,日志甚至不打印该行,就好像它在代码的这一部分之前被卡住了一样,这在代码中很早就可以得到它。

可以使用SDK吗?

路由器

from webapp2 import WSGIApplication, Route
from search.get_ads import URI_QUERY_REGEX # a simple variable who's values is: r"([a-z0-9-#,&áéíúóñäëïöüàèìòùç']+)"
import os

print "Router" # This line is for debugging

app = WSGIApplication([
    Route(r'/', handler='app.home.Home'),
    Route(r"/<query:%s+>" % URI_QUERY_REGEX, handler='app.serp.Search'),
    Route(r"/<query:%s+>/<page:[\d]>" % URI_QUERY_REGEX, handler='app.serp.Search'),
    ],
    debug=True if config['env'] == 'dev' else False, config=config
)

请注意,有两个URL可以指向搜索处理程序:

  • r"/<query:%s+>" - &gt;第一页结果
  • r"/<query:%s+>/<page:[\d]>" - &gt;第二页,进一步

app.serp.Search

def get(self, query, page=0):
    q = query.split('-')
    # ...
    # Does stuff to clean query and sends a urlfetch to fetch ads according to query. I dont think the issue lies here...

2 个答案:

答案 0 :(得分:0)

我认为您的所有搜索请求都与/<query:%s+>正则表达式匹配,因此无法访问/<query:%s+>/<page:[\d]>

您只需要切换最后两个Route(..)条目:

app = WSGIApplication([
    Route(r'/', handler='app.home.Home'),
    Route(r"/<query:%s+>/<page:[\d]>" % URI_QUERY_REGEX, handler='app.serp.Search'),
    Route(r"/<query:%s+>" % URI_QUERY_REGEX, handler='app.serp.Search'),
    ],
    debug=True if config['env'] == 'dev' else False, config=config
)

答案 1 :(得分:0)

管理来解决这个问题。显然这是字符串替换。我试着简单地连接字符串,现在工作正常。

uri_query_1st_page = r"/<query:" + URI_QUERY_REGEX + ">"
uri_query_more_pages = uri_query_1st_page + r"/<page:[\d]>"

## App Routes ##
app = WSGIApplication([
    Route(r'/', handler='app.home.Home'),
    Route(uri_query_1st_page, handler='app.serp.Search'),
    Route(uri_query_more_pages, handler='app.serp.Search'),
    ],
    debug=True if config['env'] == 'dev' else False, config=config
)
相关问题