gpt4 book ai didi

python - django多进程问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:54 24 4
gpt4 key购买 nike

我有 django 应用程序,通过 fastcgi 在 lighttpd 下运行。 FCGI 运行脚本如下所示:

python manage.py runfcgi socket=<path>/main.socket
method=prefork \
pidfile=<path>/server.pid \
minspare=5 maxspare=10 maxchildren=10 maxrequests=500 \

我使用 SQLite。所以我有 10 个进程,它们都使用同一个数据库。接下来我有 2 个观点:

def view1(request)
...
obj = MyModel.objects.get_or_create(id=1)
obj.param1 = <some value>
obj.save ()

def view2(request)
...
obj = MyModel.objects.get_or_create(id=1)
obj.param2 = <some value>
obj.save ()

如果这个 View 在两个不同的线程中执行,有时我会在数据库中获取 MyModel 实例,id=1 并更新 param1 或 param2(但不是两者)——这取决于哪个进程是第一个。 (当然在现实生活中 id 会改变,但有时 2 个进程使用相同的 id 执行这​​两个 View )

问题是:我应该怎么做才能获得具有更新的 param1 和 param2 的实例?我需要一些东西来合并不同流程中的更改。

一个决定是创建进程间锁定对象,但在这种情况下,我将获得序列执行 View ,它们将无法同时执行,所以我寻求帮助

欺骗 Django: How can I protect against concurrent modification of data base entries

最佳答案

如果你需要这样的并发访问数据库,SQLite 不是一个好的选择。我建议切换到其他一些 rdbms,比如 MySQL 或 PostgreSQL,还要考虑 get_or_create 的脆弱性:

How do I deal with this race condition in django?

关于上面的链接,该问题还有第二种解决方案 - 使用 READ COMMITED 隔离级别,而不是 REPEATABLE READ。但它的测试较少(至少在 MySQL 中),因此可能存在更多错误/问题。

关于python - django多进程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2915609/

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