Как запустить функцию другого модуля в новом процессе
Возникла проблема с асинхронностью кода на python. У нас есть бот, написанный на библиотеке aiogram. В нем необходимо создать процесс, в котором будет бесконечно выполнятся функция из другого модуля. Как это реализовать?
Вот код функции из другого модуля (parser), который нужно запустить в новом процессе:
async def main():
while True:
tasks = [
asyncio.create_task(parse_skysports()),
asyncio.create_task(parse_guardiansport()),
asyncio.create_task(parse_ign()),
asyncio.create_task(parse_stopgame()),
asyncio.create_task(parse_politico()),
asyncio.create_task(parse_voanews())
]
connection = db.DbConnection()
for result in await asyncio.gather(*tasks):
connection.update_data(paper_name=result[0], news=result[1])
time.sleep(20)
Эту функцию необходимо вызвать через asyncio.run() в основном модуле, но так, чтобы бот продолжал работать.
Вот такой подход не работал:
import parser
import asyncio
from aiogram import Bot, Dispatcher, executor, types
import multiprocessing as mp
...
def parsing():
asyncio.run(parser.main())
...
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
process = mp.Process(target=parsing)
process.start()
В данном случае бот работал, но функция из модуля parser не работала.
Заранее спасибо за помощь.
Источник: Stack Overflow на русском