相关疑难解决方法(0)

Django多处理和数据库连接

背景:

我正在使用一个使用Django和Postgres数据库的项目.我们也在使用mod_wsgi以防万一,因为我的一些网络搜索提到了它.在Web表单提交中,Django视图启动了一项需要花费大量时间的工作(超过用户想要等待的时间),因此我们在后台通过系统调用启动工作.现在运行的作业需要能够读取和写入数据库.因为这项工作需要很长时间,所以我们使用多处理来并行运行部分工作.

问题:

顶级脚本具有数据库连接,当它生成子进程时,似乎父级的连接可供子级使用.然后有一个例外,关于如何在查询之前调用SET TRANSACTION ISOLATION LEVEL.研究表明,这是因为尝试在多个进程中使用相同的数据库连接.我发现一个线程建议在子进程的开头调用connection.close(),这样Django会在需要时自动创建一个新连接,因此每个子进程都有一个唯一的连接 - 即不共享.这对我来说不起作用,因为在子进程中调用connection.close()会导致父进程抱怨连接丢失.

其他调查结果:

我读过的一些东西似乎表明你不能真正做到这一点,而且多处理,mod_wsgi和Django不能很好地结合在一起.我觉得这似乎很难相信.

有人建议使用芹菜,这可能是一个长期的解决方案,但我目前无法安装芹菜,等待一些批准程序,所以现在不是一个选项.

在SO和其他地方找到了关于持久数据库连接的几个参考资料,我认为这是一个不同的问题.

还找到了关于psycopg2.pool和pgpool的引用以及关于bouncer的内容.不可否认,我不理解我正在阅读的大部分内容,但它肯定不会像我一样对我跳出来.

目前的"解决方案":

就目前而言,我已经恢复了只是连续运行的东西,它可以工作,但比我想要的慢.

关于如何使用多处理并行运行的任何建议?好像我可以让父母和两个孩子都拥有与数据库的独立连接,事情就可以了,但我似乎无法得到那种行为.

谢谢,抱歉这个长度!

django multiprocessing

79
推荐指数
4
解决办法
4万
查看次数

Django + FastCGI - 随机提升OperationalError

我正在运行Django应用程序.以前在Apache + mod_python下,它一切都好.切换到Lighttpd + FastCGI.现在我随机获得以下异常(地点和出现的时间似乎都不可预测).由于它是随机的,并且只在切换到FastCGI之后出现,我认为它与某些设置有关.

谷歌时发现了一些结果,但它们似乎与设置maxrequests = 1有关.但是,我使用默认值,即0.

任何想法在哪里寻找?

PS.我正在使用PostgreSQL.也可能与此相关,因为在进行数据库查询时会出现异常.

 File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 86, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 140, in root
   if not self.has_permission(request):

 File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 99, in has_permission
   return request.user.is_authenticated() and request.user.is_staff

 File "/usr/lib/python2.6/site-packages/django/contrib/auth/middleware.py", line 5, in __get__
   request._cached_user = get_user(request)

 File "/usr/lib/python2.6/site-packages/django/contrib/auth/__init__.py", line 83, in get_user
   user_id = request.session[SESSION_KEY]

 File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py", line 46, in __getitem__
   return self._session[key]

 File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py", line 172, in _get_session
   self._session_cache = self.load()

 File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/db.py", line 16, in …
Run Code Online (Sandbox Code Playgroud)

python django fastcgi lighttpd exception

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

django ×2

exception ×1

fastcgi ×1

lighttpd ×1

multiprocessing ×1

python ×1