python代码的异步有问题。我们在aiogram库中编写了一个机器人。有必要在其中创建一个进程,其中将无休止地执行来自另一个模块的功能。如何实施?
这是需要在新进程中运行的另一个模块(解析器)的函数代码:
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()
在这种情况下,机器人可以工作,但解析器模块的功能不起作用。
预先感谢您的合作。
您需要创建两个进程 - 使用机器人和使用
while True: ...并启动两个进程: