【问题标题】:I want to traverse a list using multiple workers in celery我想在芹菜中使用多个工人遍历一个列表
【发布时间】:2023-03-06 02:26:01
【问题描述】:

我有一个清单:

 url_list=["abc.com","def.com","xyz.com"."pqr.com"...] - 100,000 entries

我想使用 100 名 celery 工人来遍历这个列表,以减少完成它所需的时间。

我的问题是:我如何将这个 url_list 提供给工人,以便这 100 名芹菜工人同时在 url_list 上射击,而不会击中列表中的元素,该元素已经被其他一些人遍历过工人?

我做了一个目录,proj->celery.py,tasks.py

据我了解,我将在 tasks.py 文件中提及我的任务,并在 python shell 中使用.delay 函数调用该任务。 celery.py 将包含配置内容。

谁能帮帮我?

【问题讨论】:

    标签: python celery celery-task


    【解决方案1】:

    换句话说,您有 100 个进程接收相同的列表,它们需要共享状态(节点访问真/假)

    您需要以某种方式在进程之间进行通信,这意味着任务需要与运行该任务的其他工作人员共享对象。

    IMO 这不是很有效,可能会让您头疼并产生错误,也许 map/reduce 方法会更容易,这意味着在调用任务之前,您将每个工作人员将获得的列表的哪一部分分开。

    您不需要将 100 个作业分开,您可以将 100k 条目列表划分为 10 个条目列表,因此每个工作人员一次将处理 10 个条目,一旦完成,它将从队列中获取下一批

    【讨论】:

    • 所以基本上我对你所说的理解是:就像我有 100,000 个 url,在调用 .delay() 函数时,我应该将每个工人的起始索引和结束索引传递为论据。这是你说的吗?
    • 你可以,但我相信与其传递列表和索引,不如只传递相关的切片
    • 正确。就我的信息而言,有没有办法在工作人员之间共享这个 url 列表?
    • 任何进程间通信,例如可以使用文件或套接字
    猜你喜欢
    • 2017-08-15
    • 2015-05-13
    • 2021-10-24
    • 2018-07-10
    • 1970-01-01
    • 2012-02-03
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多