Мой главный вопрос - как организовать эти две функции в два отдельных потока? Я попытался организовать их в отдельные процессы, но кажется, что многопоточность - намного более простой выход в моей ситуации.
Я создаю небольшое приложение, и я в основном разделил его на 3 части:
1-ая часть - это когда пользователь вводит некоторые данные в программу через input ()
2-ая часть - это функция, которая принимает некоторые данные, которыепользователь вошел, отправил его через запрос POST и собрал ответ сервера. (давайте назовем это «функцией A»)
3-я часть, которая также является самой большой, является основной функцией, которая берет некоторые данные из пользовательского ввода, а также ответ сервера отфункция A, и использует его для отправки нескольких запросов POST. (давайте назовем это «функцией B»)
Еще одна важная деталь: функция A должна запускаться каждые 30 минут внутри бесконечного цикла, обеспечивая функцию B свежими данными с сервера. И, если появляется ошибка на стороне сервера, функция B должна иметь возможность «принудительно перезапустить / обновить» функцию A, чтобы получить обновленную информацию до автоматического перезапуска 30-минутного цикла.
Я прикрепилчрезвычайно упрощенная версия моей программы для более легкого понимания:
user_input = input()
def function_A():
global server_response
while True:
server_request_A = requests.post(url=user_input)
server_response = str(server_request_A.headers[12:34])
time.sleep(1800)
def function_B():
global server_response
while True:
server_request_B = requests.post(
url=function_b_url, headers=server_response)
if server_requests_B.status_code == 200:
break
elif server_requests_B.status_code == 403:
# Insert a way to restart function/thread A and get correct server_response
pass
# Here we create and launch threads based on functions A and B.
Мои основные проблемы:
Как убедиться, что два потока / функции могут взаимодействоватьдруг с другом / отправить данные из функции A в функцию B? Я создал глобальную переменную, которая используется в обеих функциях, но будет ли этого достаточно для многопоточности? Я знаю, что для многопроцессорной обработки вам нужно вручную назначить переменные, которые будут использоваться обоими процессами / функциями, одинаково ли для многопоточности?
Возможно ли принудительное перезапуск одного потокадругой поток, когда определенный "флаг" поднят? Предположим, что функция B сталкивается с сообщением об ошибке, когда пытается использовать данные, предоставленные ей функцией A. Я хочу, чтобы он принудительно перезапускал / обновлял поток, использующий функцию A, но я слышал, что это невозможно и является плохой практикой. Какие у меня будут варианты?
И, последний вопрос: как мне правильно создавать потоки и назначать им функции? Я пытался искать учебники в Интернете, но они были либо слишком просты для моего конкретного случая, либо слишком технически, чтобы я мог их понять и использовать.
Я действительно ценю всю помощь, ребята!
PS Я задал подобный вопрос здесь около недели назад, и люди рекомендовали мне использовать планировщик Windows. Я просто хотел уточнить, что это не то, что я ищу, и я специально хочу использовать многопоточные или многопроцессорные модули для своей программы.