gpt4 book ai didi

python - Celery Worker 中的多线程

转载 作者:太空狗 更新时间:2023-10-29 17:50:59 30 4
gpt4 key购买 nike

我正在使用 Celery 和 RabbitMQ 来处理来自 API 请求的数据。流程如下:

请求> API> RabbitMQ> Celery Worker> 返回

理想情况下,我会产生更多的 celery worker ,但我受限于内存限制。

目前,我的流程中的瓶颈是从传递给工作人员的 URL 中获取和下载数据。粗略的,流程大概是这样的:

def celery_gets_job(url):
data = fetches_url(url) # takes 0.1s to 1.0s (bottleneck)
result = processes_data(data) # takes 0.1s
return result

这是 Not Acceptable ,因为工作人员在获取 URL 时被锁定了一段时间。我正在考虑通过线程改进这一点,但我不确定最佳做法是什么。

  • 有没有办法让 celery worker 异步下载传入的数据,同时在不同的线程中处理数据?

  • 我是否应该让单独的工作人员进行抓取和处理,并可能通过 RabbitMQ 进行某种形式的消息传递?

最佳答案

使用 eventlet库,您可以修补标准库以使其异步。

首先导入异步 urllib2:

from eventlet.green import urllib2

因此您将获得 url 正文:

def fetch(url):
body = urllib2.urlopen(url).read()
return body

查看更多 eventlet 示例 here .

关于python - Celery Worker 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682766/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com