如何使用不同的参数触发相同的云运行作业/服务?

bz4sfanl  于 2022-10-02  发布在  Python
关注(0)|答案(2)|浏览(114)

我正试着用云运行让一台破烂的刮刀工作。其主要思想是,每隔20分钟,云调度器cron就会触发网络刮取器,并从不同的站点获取数据。所有站点都有相同的结构,所以我想使用相同的代码并并行执行抓取作业,执行类似scrapy crawl scraper -a site=www.site1.comscrapy crawl scraper -a site=www.site2.com的操作。

我已经部署了一个版本的刮板,但它只能做scrapy crawl scraper。如何才能在执行命令的站点更改时做到这一点?

另外,我应该使用云运行作业还是服务?

mwg9r5ms

mwg9r5ms1#

没有直接的办法。

Cloud Scheduler可以使用参数调用您的应用程序,但您需要为每组参数创建一个新作业。

Cloud Run支持环境变量,但您需要重新部署您的应用程序才能修改它们。

您可以将应用程序的参数存储在Secret Manager或云存储中。然后,您的应用程序将从其中一个位置读取当前配置。

umuewwlo

umuewwlo2#

根据那个page of documentation,有一个诡计。

  • 定义多个任务,比方说,您设置的任务数等于要报废的站点数。为此,请使用--任务参数
  • 在您的容器中(或在云存储中,但如果这样做,您必须在启动过程之前下载文件),添加一个文件,每行有一个网站要报废。
  • 在运行时,使用CLOUD_RUN_TASK_INDEX环境变量。该变量表示执行中的任务编号。对于每个不同的数字,在您的网站文件中选择一行(该行的编号等于env var值)。

这样,您就可以利用云运行作业和并行性。

这里的主要权衡是要废弃的网站列表的静态形式。

相关问题