Как запусить две функции асинхронно?
Добрый день, пытаюсь запустить две функции:
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.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для запуска двух функций асинхронно в 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(); ?>
В этом примере создаются два объекта класса MyThread, каждому из которых передается функция, которую нужно выполнить. Затем функции запускаются асинхронно с помощью метода start(), и после этого вызывается метод join(), чтобы дождаться окончания выполнения обоих функций.
Обратите внимание, что для использования расширения pthreads необходимо установить его на сервере и активировать в настройках PHP. Также стоит помнить, что работа с потоками требует аккуратности, чтобы избежать гонок данных и других проблем, связанных с параллельным выполнением кода.