Вопрос - Как из кода запустить асинхронную функцию, чтобы выполнение кода продолжалось? | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой уникальный скрипт?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Вопрос Как из кода запустить асинхронную функцию, чтобы выполнение кода продолжалось?

infinity

Джун
Автор темы
10 Янв 2023
19
14
0
Пишу бота тг на библиотеке aiogram. Нужно запускать асинк функцию, но чтобы бот отвечал на сообщения других пользователей и не молчал, пока функция работает. Извиняюсь за такую формулировку вопроса)
 

bandicuttt

Сеньор
int('xyi')
8 Янв 2023
239
66
28
infinity, Есть много решений так-то, всё зависит от самой функции. Треды, мультипроцессинг и асинхронность. Почитай про все 3 и выбери тот, что тебе нужен, но вообще если твой код асинхронный, то он уже не будет лочить поток. С другой стороны если ты в своей async функции используешь какой-нибудь синхронный модуль по типу реквестов, то поток будет лочиться и чтобы этого избежать можно использовать асинк модуль aiohttp. В общем суть ты понял, почитай про 3 модуля которые я написал выше, лишним точно не будет
 
Like
  • 1
Реакции: 1 user

bandicuttt

Сеньор
int('xyi')
8 Янв 2023
239
66
28
infinity, Читай про асинхронность, многопоточность и мультипроцессинг. То, что ты хочешь можно сделать так:

asyncio
Код:
import asyncio
async def func(event):
    print(1)
    event.set()
    await asyncio.sleep(3)
    await event.wait()
    print('1')
async def main():
    event = asyncio.Event()
    task = asyncio.create_task(func(event))
    await event.wait()
    print('2332321')
    event.set()
    await task
asyncio.run(main())

threading

Код:
import threading
import time
def func():
    print(1)
    time.sleep(3)
    print('1')
threading.Thread(target = func).start()
print('2332321')

multiprocessing

Код:
import multiprocessing
import time
def func(event1, event2):
    print(1)
    event1.set()
    time.sleep(3)
    event2.wait()
    print('1')
def main():
    event1 = multiprocessing.Event()
    event2 = multiprocessing.Event()
    process = multiprocessing.Process(target=func, args=(event1, event2))
    process.start()
    event1.wait()
    print('2332321')
    event2.set()
    process.join()
if __name__ == '__main__':
    main()
 
Like
  • 1
Реакции: 1 user
Активность:
Пока что здесь никого нет