小编dar*_*roo的帖子

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:在更新调用中为文本字段使用F表达式

在django视图中,我需要将字符串数据附加到数据库中现有文本列的末尾.因此,例如,假设我有一个名为"ATable"的表,并且它有一个名为"aField"的字段.我希望能够以无竞赛条件的方式将字符串附加到"aField"的末尾.最初,我有这个:

tableEntry = ATable.objects.get(id=100)
tableEntry.aField += aStringVar
tableEntry.save()
Run Code Online (Sandbox Code Playgroud)

问题在于,如果同时执行此操作,两者都可以获得相同的"tableEntry",则它们各自独立更新,最后一个"保存"获胜,丢失另一个附加的数据.

我对此进行了一些研究,并使用F表达式找到了这个,我希望它可以工作:

ATable.objects.filter(id=100).update(aField=F('aField') + aStringVar)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我得到一个SQL错误,说:

operator does not exist: text + unknown
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

尝试更改为"str(aStringVar)",即使它已经是一个字符串 - 没有运气..我发现一些django错误报告抱怨类似的问题,但我没有看到修复或解决方法.有没有什么方法可以转换aStringVar,以便它可以附加到F表达式的文本?BTW - 也试过"str(F('aField'))+ aStringVar"但是将F表达式的结果转换为字符串"(DEFAULT :)".

django

22
推荐指数
3
解决办法
5633
查看次数

由于范围有限,比较总是假的...有模板

我有一个模板化函数,它对模板类型变量进行操作,如果该值小于0,则将其设置为0.这样可以正常工作,但是当我的模板化类型未签名时,我会收到有关如何比较总是的警告假.这显然是有道理的,但由于它是模板化的,我希望它对所有数据类型(有符号和无符号)都是通用的,而不是发出警告.

我在Linux上使用g ++,并且我猜测有一种方法可以通过g ++的命令行选项来抑制该特定警告,但我仍然希望在其他非模板化的情况下得到警告.我想知道在代码中是否有某种方法可以防止这种情况,而无需编写多个版本的函数?

template < class T >
T trim(T &val)
{
  if (val < 0)
  {
    val = 0;
  }
  return (val);
}
int main()
{
  char cval = 5;
  unsigned char ucval = 5;

  cout << "Untrimmed: " << (int)cval;
  cval = trim(cval);
  cout << " Trimmed: " << (int)cval << endl;

  cout << "Untrimmed: " << (int)ucval;
  cval = trim(ucval);
  cout << " Trimmed: " << (int)ucval << endl;

 return (0);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates warnings

6
推荐指数
2
解决办法
1305
查看次数

Ubuntu,opencv和链接

我几天前安装了Ubuntu,并使用apt-get安装build_essentials,opencv,highgui等.g ++是4.6.1,opencv似乎是2.1.0 ..我没有从源代码构建opencv ..

我们有一些使用opencv功能的软件.让我们假装源文件名为a.cpp和b.cpp.我编译成ao和bo然后将它们放入.so库(称之为libab.so).

最后,有一个带有main的文件(称之为z.cpp).我尝试从它构建一个可执行文件,但我得到了大量的"未定义的引用"错误到cv :: stuff.我的链接看起来像这样:

g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
Run Code Online (Sandbox Code Playgroud)

然后我得到未定义的引用错误(所有这些都是cv :: stuff).

有趣的是,如果我直接链接到我的.o文件,它就构建得很好.所以这:

g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
Run Code Online (Sandbox Code Playgroud)

作品.

我读过的所有东西似乎暗示这可能是一个链接行排序问题,但我已经尝试了所有排序排列并得到同样的问题,所以我真的不认为它是我的问题,但我仍然可能是错的.任何人都有任何想法如何使用我的库来构建它,以及为什么如果我使用库中的完整.o文件成功构建,但无法使用库本身构建,它会采取不同的行为?

ubuntu linker opencv

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

不同用户的 Docker 镜像大小

更新: 好像这不是一个码头工人,具体的事情,但也许一个Ubuntu或useradd的东西。什么我发现是/var/log/lastlog/var/log/faillog是主犯..后做:

RUN useradd -ms /usr/bin/tcsh -u 1000 -g users id1000
Run Code Online (Sandbox Code Playgroud)

该文件的/var/log/lastlog大小约为 288 kB .. 但这样做:

RUN useradd -ms /usr/bin/tcsh -u 10000000 -g users id10000000
Run Code Online (Sandbox Code Playgroud)

相反,该文件的/var/log/lastlog大小为 2.8 GB。

现在我有了这个新信息,添加 ubuntu 标签..

这个文件是否有理由根据添加用户的 UID 增长?

原帖:

我有以下 Dockerfile(显然不是很有用,为了演示问题而最小化):

FROM ubuntu

RUN apt-get update

WORKDIR /usr/src/

RUN useradd -ms /usr/bin/tcsh -u 1001 -g users daroo ; adduser daroo sudo ; echo daroo:daroo | chpasswd
USER daroo
#RUN useradd -ms /usr/bin/tcsh -u 16777249 -g users …
Run Code Online (Sandbox Code Playgroud)

size ubuntu docker

5
推荐指数
1
解决办法
651
查看次数

Android LinearLayout和图像

好吧,我知道这不会很难,但我有一点时间了.我是一个经验丰富的Java程序员,但对Android来说很新(好吧,所以我正在进行第一次测试app还是......)

我想在屏幕上有3个图像,一个"主"图像占据屏幕的前75%,然后两个较小的图像水平放置在屏幕下方.(想想一个画廊,显示主(当前)图像,左边是"前一个"图像图标,右边是主画面下方的"下一个"图像图标).

我没有大小图像,它们都很大,我希望它们以缩放的方式显示.问题是无论我做什么,"主"图像占用太多空间,因此最常见的是,底部的图像根本不可见.

我意识到我可以将主图像的高度设置为指定的下降次数并且已经有效,但是如果我的应用程序进入具有不同密度的设备,它将看起来很傻.我试过玩android:layout_weight,但没有运气.我认为如果我将layout_weights设置为相等,它会使视图占据相同的比例,但"主"图像总是占主导地位并导致小图像被剪切在底部或完全推离屏幕.

我也意识到我可能会使用其他布局,但只是让根布局是一个垂直的LinearLayout,它由一个图像和一个由2个图像组成的水平LinearLayout组成.像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >

  <ImageView
    android:id="@+id/cbPicView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/cb1"
    android:layout_weight="1"
  />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    >

    <ImageView
      android:id="@+id/cbPrevPicView"
      android:layout_width="50dip"
      android:layout_height="50dip"
      android:src="@drawable/cb4"
      android:layout_weight="1"
    />

    <ImageView
      android:id="@+id/cbNextPicView"
      android:layout_width="50dip"
      android:layout_height="50dip"
      android:src="@drawable/cb2"
      android:layout_weight="1"
    />
  </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

抱歉长度 - 试图提供尽可能多的细节.谢谢!

android android-linearlayout

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