Jam*_*s R 6 python django celery urllib3 python-requests
我们有一个脚本可以定期从各种来源下载文档。我将把它转移到 celery,但在这样做的同时,我想利用连接池,但我不知道如何去做。
我目前的想法是使用请求来做这样的事情:
import celery
import requests
s = requests.session()
@celery.task(retry=2)
def get_doc(url):
doc = s.get(url)
#do stuff with doc
Run Code Online (Sandbox Code Playgroud)
但我担心连接会无限期地保持打开状态。
只要我正在处理新文档,我真的只需要连接保持打开状态。
所以这样的事情可能:
import celery
import requests
def get_all_docs()
docs = Doc.objects.filter(some_filter=True)
s = requests.session()
for doc in docs: t=get_doc.delay(doc.url, s)
@celery.task(retry=2)
def get_doc(url):
doc = s.get(url)
#do stuff with doc
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我不确定连接会话是否会跨实例持续存在,或者一旦酸洗/取消酸洗完成,请求是否会创建新连接。
最后,我可以在类方法上尝试对任务装饰器的实验性支持,如下所示:
import celery
import requests
class GetDoc(object):
def __init__(self):
self.s = requests.session()
@celery.task(retry=2)
def get_doc(url):
doc = self.s.get(url)
#do stuff with doc
Run Code Online (Sandbox Code Playgroud)
最后一个似乎是最好的方法,我将对此进行测试;但是,我想知道这里是否有人已经做过类似的事情,或者如果没有,你们中的一个人可能有比上述方法更好的方法。
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |