Как сделать вызов функции после завершения другой?

Рейтинг: 0Ответов: 2Опубликовано: 26.05.2023

который день бьюсь с этой проблемой не могу разобрать. Имеем такую ситуацию, функция 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()


Ответы

▲ 0Принят

Можно использовать функцию 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()
▲ 0
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()