问题描述
对于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 (将#修改为@)