У меня есть приложение Flask с кодом, который обрабатывает данные, поступающие из запроса в другое веб-приложение, размещенное на другом сервере, и оно отлично работает при разработке, кроме того, библиотеку, которая обрабатывает запрос, можно вызывать и отлично использовать из python в наш сервер Windows ... Однако, когда библиотека вызывается веб-приложением в производстве с использованием 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, и вернуть ее представление повтор.






В случае, если кому-то интересно, после большого количества исследований, попыток запустить мой модуль как подпроцесса и всевозможных экспериментов, мне пришлось прибегнуть к репликации всего набора данных, который мне был нужен для запроса с удаленного сервера в мою базу данных с еженедельным crontab, а затем запросить это.
Итак ... Да, честно говоря, у меня нет решения или объяснения, почему это происходит. Но если это происходит с вами, лучше всего, к сожалению, может быть репликация всего набора данных на вашем сервере.
Мое первое предположение - это брандмауэр, блокирующий исходящие соединения с рабочего сервера. Если это в Windows, еще более вероятно, что ограничения применяются к процессу Apache, но не к отдельному запуску скрипта?