在 Celery Worker 中使用 requests_cache(带有 sqlite 后端)时出现内存错误

问题描述 投票:0回答:1

我在 M1 MacBook 上安装了

requests-cache==1.1.0
celery==5.3.4

两者的配置都没有什么特别的,但在这里发布只是为了以防万一它有帮助

芹菜配置:

broker_url="redis://localhost",
result_backend="redis://localhost",
task_ignore_result=True,

缓存会话配置:

CachedSession("http_cache.db")

每当我尝试运行通过

CachedSession
发出 get 请求的 celery 任务时,我都会收到以下错误:

File "***/site-packages/requests_cache/backends/sqlite.py", line 294, in __getitem__
    cur = con.execute(f'SELECT value FROM {self.table_name} WHERE key=?', (key,))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MemoryError

从上面一行之前的调试器中我看到:

(Pdb) self.table_name
'responses'
(Pdb) key
'32805c2791b85726'
(Pdb) con.execute(f'SELECT value FROM {self.table_name} WHERE key=?', (key,))
*** MemoryError

我也无法在连接上执行任何其他查询

(Pdb) con.execute('SELECT * FROM sqlite_master')
*** MemoryError

当我直接在 shell 中执行该任务时,该任务就会运行,但是当它通过 celery Worker 运行时,它会在尝试在连接上执行时遇到

MemoryError

当我使用常规

requests
或将后端更改为
Redis
时,该任务也可以正常运行。

我希望使用

Sqlite
后端,因为我需要无限期地保留响应。我有一种感觉,我可以切换到
Mongo
后端,并且不会遇到此问题,但想在承诺添加该依赖项之前将其发布到此处。

真的迷失了这个,有什么想法吗?

python sqlite python-requests celery
1个回答
0
投票

经过一番挖掘后,我认为这与这里的锁有关:https://github.com/requests-cache/requests-cache/blob/main/requests_cache/backends/sqlite.py#L249

运行 Celery 时设置

--pool threads
可以解决该问题。

© www.soinside.com 2019 - 2024. All rights reserved.