Как запусить две функции асинхронно?

Ссылка скопирована
1 ответ

Добрый день, пытаюсь запустить две функции:

async def main():     await send()     await dp.start_polling(bot)  asyncio.run(main())

async def main(): await send() await dp.start_polling(bot) asyncio.run(main())

Функция send() представляет собой async функцию с бесконечным циклом:

async def send():     while True:         await asyncio.sleep(1)         now = datetime.now()         current_time = now.strftime("%S")         if current_time == '30':             # дальше просто функция

async def send(): while True: await asyncio.sleep(1) now = datetime.now() current_time = now.strftime("%S") if current_time == '30': # дальше просто функция

По неизвестной для меня причине запускается только одна из функций, хотя они вроде обе асинхронные. Как мне запустить обе функции?

Дополнительно:

А зачем тут написано await перед send?

Всё так и должно быть, ведь await означает ожидание завершения функции и получения её результата, вторая не будет запущена до этого.

Можно например так:

send_result = send() polling_result = dp.start_polling(bot) await send_result await polling_result

send_result = send() polling_result = dp.start_polling(bot) await send_result await polling_result

Или так:

send_result = send() polling_result = dp.start_polling(bot) await asyncio.gather(send_result, polling_result)

send_result = send() polling_result = dp.start_polling(bot) await asyncio.gather(send_result, polling_result)

Или даже так:

await asyncio.gather(      send(),      dp.start_polling(bot) )

await asyncio.gather( send(), dp.start_polling(bot) )

Потому что await, как следует из названия, асинхронно ожидает. Используйте create_task или gather.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

Для запуска двух функций асинхронно в PHP можно воспользоваться механизмом многопоточности с использованием расширения pthreads. Вот пример кода, демонстрирующий запуск двух функций асинхронно:

function = $function;
    }
 
    public function run() {
        call_user_func($this->function);
    }
}
 
$function1 = function() {
    // Код первой функции
};
 
$function2 = function() {
    // Код второй функции
};
 
$thread1 = new MyThread($function1);
$thread2 = new MyThread($function2);
 
$thread1->start();
$thread2->start();
 
$thread1->join();
$thread2->join();
?>

function = $function; } public function run() { call_user_func($this->function); } } $function1 = function() { // Код первой функции }; $function2 = function() { // Код второй функции }; $thread1 = new MyThread($function1); $thread2 = new MyThread($function2); $thread1->start(); $thread2->start(); $thread1->join(); $thread2->join(); ?>

В этом примере создаются два объекта класса MyThread, каждому из которых передается функция, которую нужно выполнить. Затем функции запускаются асинхронно с помощью метода start(), и после этого вызывается метод join(), чтобы дождаться окончания выполнения обоих функций.

Обратите внимание, что для использования расширения pthreads необходимо установить его на сервере и активировать в настройках PHP. Также стоит помнить, что работа с потоками требует аккуратности, чтобы избежать гонок данных и других проблем, связанных с параллельным выполнением кода.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно