Как сделать вызов функции после завершения другой?
который день бьюсь с этой проблемой не могу разобрать. Имеем такую ситуацию, функция task запускается каждый день в 23:30 через schedule. Нужно сделать так, чтобы сразу после того как отработает функция task , запускались функции в потоке task2, task3, task4
import schedule
import threading
from concurrent.futures import ThreadPoolExecutor
class B:
def task2(self):
print("Вызов 1 функции после проверки task")
changer = B('table_2', 'table', 'table_1')
class С:
def task3(self):
print("Вызов 2 функции после проверки task")
check_posts = C('table_1', 'table_2', 'table')
class D:
def task4(self):
print("Вызов 3 функции после проверки task")
check_users = D('users_1', 'users_2', 'users')
class A:
def task():
print("Начало проверки")
time.sleep(3)
print(f"Проверка завершена") #после этого нужен запуск task2 task3 task4
def main():
bot = A()
pool = ThreadPoolExecutor()
schedule.every().day.at("23:30").do(lambda: pool.submit(bot.task))
if __name__ == "__main__":
main()
Ответы (2 шт):
Автор решения: Килобайт
→ Ссылка
import schedule
import threading
import time
from concurrent.futures import ThreadPoolExecutor
class B:
def __init__(self, arg1, arg2, arg3):
pass
def task2(self):
print("Вызов 1 функции после проверки task")
changer = B('table_2', 'table', 'table_1')
class C:
def __init__(self, arg1, arg2, arg3):
pass
def task3(self):
print("Вызов 2 функции после проверки task")
check_posts = C('table_1', 'table_2', 'table')
class D:
def __init__(self, arg1, arg2, arg3):
pass
def task4(self):
print("Вызов 3 функции после проверки task")
check_users = D('users_1', 'users_2', 'users')
class A:
def task(self):
print("Начало проверки")
time.sleep(3)
print(f"Проверка завершена")
# добавлен запуск функций task2, task3, task4 в потоке
pool.submit(changer.task2)
pool.submit(check_posts.task3)
pool.submit(check_users.task4)
def main():
pool = ThreadPoolExecutor(4) # количество потоков
bot = A()
schedule.every().day.at("23:30").do(lambda: pool.submit(bot.task))
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()
Автор решения: mrBars1k
→ Ссылка
Можно использовать функцию submit:
import schedule
import threading
import time
from concurrent.futures import ThreadPoolExecutor
class B:
def task2(self):
print("Вызов 1 функции после проверки task")
changer = B()
class C:
def task3(self):
print("Вызов 2 функции после проверки task")
check_posts = C()
class D:
def task4(self):
print("Вызов 3 функции после проверки task")
check_users = D()
class A:
def task(self):
print("Начало проверки")
time.sleep(3)
print(f"Проверка завершена")
with ThreadPoolExecutor() as executor:
executor.submit(changer.task2)
executor.submit(check_posts.task3)
executor.submit(check_users.task4)
def main():
bot = A()
schedule.every().day.at("23:30").do(bot.task)
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()