6

我正在使用 Celery 来自动化一些屏幕抓取。我正在使用 Selenium 打开 Chrome 网络驱动程序,操作页面,保存一些数据,然后转到队列中的下一页。问题是它为队列中的每个任务构建和分解 Web 驱动程序,这非常耗时且资源密集。

如何跨调用持久化对象?我已经阅读了一些关于 Celery 中连接池的内容,但我不清楚它是如何工作的——我在哪里构建 webdriver——在任务文件或主队列文件中?如果是后者,工作人员如何知道要使用哪个 webdriver?

例子:

刮.py:

for page in list:  
  scrape.delay(str(row['product_id']), str(row['pg_code']))

任务.py:

def scrape:
  # do some stuff
4

1 回答 1

11

由于每个工作人员都将任务实例化为单例,因此您可以将 Web 驱动程序缓存在任务对象中。该文档特别建议了这种方法。

http://docs.celeryproject.org/en/latest/userguide/tasks.html#instantiation

于 2013-11-05T22:56:00.737 回答