我有一个 Flask 应用程序,其中的代码可以处理来自托管在不同服务器上的另一个 Web 应用程序的请求的数据,并且它在开发中工作得很好,此外,可以很好地调用和使用处理请求的库来自 Windows 服务器中的 python...但是,当生产中的 web 应用程序使用 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 引发的错误并返回其repr esentation。
最佳答案
如果有人想知道,经过大量研究,尝试将我的模块作为子进程运行以及各种实验,我不得不将我需要从远程服务器查询的整个数据集复制到我的数据库每周执行一次 crontab 任务,然后进行查询。
所以...是的,坦率地说,我没有解决方案,也没有解释为什么会发生这种情况。但如果这种情况发生在您身上,您最好的选择可能就是在您的服务器上复制整个数据集。
关于python - Requests/urllib 在 Flask/Apache/mod_wsgi/Windows 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100377/