RedisQueue 可以与异步函数一起使用吗

问题描述

对于Redis_Queue, 它可以与异步任务一起使用吗?例如,这是 async_app.py 文件

import asyncio
from datetime import timedelta
from redis import Redis
from rq import Queue,Retry
import async_tasks

queue = Queue(connection=Redis())

async def queue_tasks():
    queue.enqueue(async_tasks.print_task,5,retry=Retry(max=2))
    queue.enqueue_in(timedelta(seconds=10),async_tasks.print_numbers,5)

async def main():
    print("do other things...")
    await asyncio.sleep(1)
    print("do two tasks in background")
    await queue_tasks()
    print("done!!!")

if __name__ == "__main__":
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(main())

这是 async_tasks.py 文件

import asyncio
import random

async def print_task(seconds):
    print("Starting task")
    random_num = random.randrange(1,3,1)

    if random_num == 2:
        raise RuntimeError('Sorry,I Failed! Let me try again.')
    else:
        for num in range(seconds):
            print(num,". Hello World!")
            await asyncio.sleep(1)
    print("Task completed")

async def print_numbers(seconds):
    print("Starting num task")
    for num in range(seconds):
        print(num)
        await asyncio.sleep(1)
    print("Task to print_numbers completed")

当我运行它时,我得到这个:

11:28:18 default: async_tasks.print_task(5) (1ee3dc43-4290-420f-95fe-8e69c5f61be1)
11:28:18 default: Job OK (1ee3dc43-4290-420f-95fe-8e69c5f61be1)
11:28:18 Result is kept for 500 seconds
11:28:28 default: async_tasks.print_numbers(5) (2bcf7c13-c780-4b7d-8468-28bfe5298706)
11:28:28 default: Job OK (2bcf7c13-c780-4b7d-8468-28bfe5298706)
11:28:28 Result is kept for 500 seconds

所以它只是打印出作业,但实际上并不执行异步作业。我猜 Redis_Queue 不能与异步任务一起使用,但如果我误解了这一点,请告诉我。谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)