我有一个Flask应用,该应用的代码可处理来自请求的数据,该数据来自托管在另一台服务器上的另一个Web应用,并且在开发中工作得很好,此外,可以调用并完美地使用处理该请求的库从Windows服务器中的python中删除...但是,当生产中的webapp使用mod_wsgi调用该库时,它拒绝工作,服务器发出的请求只是...超时。
我已经尝试了所有事情,从将代码移动到使用的文件,再到从请求切换到urllib……什么都没有,只要它们是由mod_wsgi发出的,所有请求我都会超时。 这是为什么?是我不知道的一些奇怪的Apache配置问题吗?
我要在下面发布该库(对不起,我必须对其进行审查,但我保证有效)
import requests
import re
class CannotAccessServerException(Exception):
pass
class ServerItemNotFoundException(Exception):
pass
class Service():
REQUEST_URL = "http://server-ip/url?query={query}&toexcel=csv"
@classmethod
def fetch_info(cls, query):
# Get Approximate matches
try:
server_request = requests.get(cls.REQUEST_URL.format(query = query), timeout = 30).content
except:
raise CannotAccessServerException
# If you're getting ServerItemNotFoundException or funny values consistently maybe the server has changed their tables.
server_regex = re.compile('^([\d\-]+);[\d\-]+;[\d\-]+;[\d\-]+;[\d\-]+;[\-"\w]+;[\w"\-]+;{query};[\w"\-]+;[\w"\-]+;[\w"\-]+;[\w"\-]+;[\w\s:"\-]+;[\w\s"\-]+;[\d\-]+;[\d\-]+;[\d\-]+;([\w\-]+);[\w\s"\-]+;[\w\-]+;[\w\s"\-]+;[\d\-]+;[\d\-]+;[\d\-]+;([\w\-]+);[\d\-]+;[\d\-]+;[\w\-]+;[\w\-]+;[\w\-]+;[\w\-]+;[\w\s"\-]+$'.format(query = query), re.MULTILINE)
server_exact_match = server_regex.search(server_request.decode())
if server_exact_match is None:
raise ServerItemNotFoundException
result_json = {
"retrieved1": server_exact_match.group(1),
"retrieved2": server_exact_match.group(2),
"retrieved3": server_exact_match.group(3)
}
return result_json
if __name__ == '__main__':
print(Service.fetch_info(99999))
PS:我知道它超时了,因为我尝试做的一件事是捕获request.get引发的错误并返回其 repr 表示。
答案 0 :(得分:0)
如果有人想知道,经过大量研究,试图将我的模块作为子进程运行,以及进行各种实验,我不得不求助于将需要查询的整个数据集从远程服务器复制到数据库中每周执行crontab任务,然后进行查询。
所以...是的,坦率地说,我没有解决方案,也没有解释为什么会发生这种情况。但是,如果发生这种情况,您最好的选择可能是复制服务器上的整个数据集。