我有一个Flask应用程序,其代码可以将来自请求的数据处理到托管在不同服务器上的另一个Web应用程序,并且它在开发中工作正常,此外,处理请求的库可以从python中调用并完全正常使用我们的Windows服务器......然而,当生产中的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:我知道它超时了,因为我尝试过的一件事是捕获requests.get引发的错误并返回它的表示。
如果有人想知道,经过大量的研究,尝试将我的模块作为子流程运行,以及各种实验,我不得不求助于复制我需要从远程服务器查询到我的数据库的整个数据集。 crontab任务,然后查询。
所以...是的,我没有解决方案,坦率地说,或解释为什么会发生这种情况。但如果发生这种情况,您最好的选择可能是遗憾地复制服务器上的整个数据集。