安装环境

安装Python包

  1. # 包
  2. pip3 install celery
  3. pip3 redis
  4. pip3 playwright
  5. # 下载chromium浏览器(可选)
  6. playwright install

安装redis

参考菜鸟教程

代码

在程序根目录建立test.py文件

  1. import asyncio
  2. import time
  3. from celery import Celery
  4. from celery.result import AsyncResult
  5. from playwright.async_api import async_playwright
  6. app = Celery("mytasks", backend="redis://localhost", broker="redis://localhost:6379/0")
  7. # async语法的异步爬虫耗时任务
  8. async def async_func():
  9. playwright = await async_playwright().start()
  10. browser = await playwright.chromium.launch(headless=False)
  11. page = await browser.new_page()
  12. await page.goto("http://zhihu.com")
  13. title = await page.title()
  14. await asyncio.sleep(10)
  15. await browser.close()
  16. return title
  17. @app.task(name="mytasks")
  18. def io_func():
  19. # 核心代码asyncio.run
  20. return asyncio.run(async_func())
  21. def main():
  22. result = io_func.delay()
  23. return result.id
  24. # 循环访问获取异步任务结果
  25. def get_result(task_id):
  26. res = AsyncResult(task_id)
  27. while True:
  28. print(res.status)
  29. if res.ready():
  30. break
  31. time.sleep(1)
  32. return res.result
  33. if __name__ == "__main__":
  34. task_id = main()
  35. print(task_id)
  36. res = get_result(task_id)
  37. print(res)

启动celery

打开终端,进入程序根目录,执行以下代码启动celery

  1. celery -A test worker -B --loglevel=info

开始测试

打开终端,进入程序根目录,执行

  1. python3 test.py