小编use*_*210的帖子

如何在Gunicorn工作人员之间共享缓存?

我正在使用Gunicorn和Flask(Pythonn 3.6)开展一项小型服务.下面的伪代码大致显示了我想要的行为.有很多序列化foo对象,我希望尽可能多地在内存中保存它们并在LRU基础上删除它们.

cache = Cache()

@app.route('/')
def foobar():
    name = request.args['name']
    foo = cache.get(name)
    if foo is None:
        foo = load_foo(name)
        cache.add(foo)

    return foo.bar()
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道如何在Gunicorn工作人员之间分享这个缓存.我正在使用有限的内存,不想持有重复的对象.某些对象会经常使用,有些可能永远不会使用,所以我认为把它们放在内存中真的很有意义.

这只是从另一个应用程序(都在同一台服务器上运行)接收请求的东西,我只是想将这些代码分开.首先,即使使用Gunicorn我也会走向完全错误的方向吗?

python flask python-3.x gunicorn

7
推荐指数
1
解决办法
1773
查看次数

为什么使用“pickle”转储比“json”快得多?

这是针对 Python 3.6 的。

编辑并删除了很多无关紧要的内容。

我原以为json比 Stack Overflow 上的其他答案和评论更快pickle,看起来很多其他人也相信这一点。

我的测试合格吗?差距比我想象的要大得多。我在非常大的物体上测试得到了相同的结果。

import json
import pickle
import timeit

file_name = 'foo'
num_tests = 100000

obj = {1: 1}

command = 'pickle.dumps(obj)'
setup = 'from __main__ import pickle, obj'
result = timeit.timeit(command, setup=setup, number=num_tests)
print("pickle: %f seconds" % result)

command = 'json.dumps(obj)'
setup = 'from __main__ import json, obj'
result = timeit.timeit(command, setup=setup, number=num_tests)
print("json:   %f seconds" % result)
Run Code Online (Sandbox Code Playgroud)

和输出:

pickle: 0.054130 seconds
json:   0.467168 seconds
Run Code Online (Sandbox Code Playgroud)

python benchmarking json pickle

3
推荐指数
1
解决办法
6978
查看次数

标签 统计

python ×2

benchmarking ×1

flask ×1

gunicorn ×1

json ×1

pickle ×1

python-3.x ×1