小编gue*_*tli的帖子

单表继承或类表继承?

我正在阅读类表继承(CTI),发现我更喜欢它.我的问题是,单表继承(STI)是否有任何特定用例,您可以在CTI上使用它?

我读了http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance,据我所知,它很稳固.STI的用例是行为差异而不是数据.

ruby database-design ruby-on-rails single-table-inheritance

11
推荐指数
1
解决办法
2040
查看次数

检测解释器在守护程序线程中关闭

我们遇到了这个错误:

http://bugs.python.org/issue1856守护程序在解释器关闭期间断言段错误.

现在我搜索一种代码来解决这个bug.

目前代码如下所示:

while True:
    do_something()
    time.sleep(interval)
Run Code Online (Sandbox Code Playgroud)

有没有办法在do_something()之前检查解释器是否仍然可用?

或者最好不要执行mythread.setDaemon(True)并检查主线程是否已退出?

python multithreading

11
推荐指数
1
解决办法
3958
查看次数

VC中的egg_info目录?

您是否将foo.egg_info目录保留在版本控制中?

这是一个在VC中使用它的例子:

  1. pip install -e foo
  2. 其他人添加了一个新的EntryPoint(pkg_resource)
  3. 您更新代码并拉出新的EntryPoint(文件foo.egg-info/entry_points.txt)
  4. 无需setup.py再次呼叫即可使用新的EntryPoint

python version-control egg

11
推荐指数
1
解决办法
1169
查看次数

Python:确保os.environ和sys.path相等:web-requests,shell,cron,celery

我想,以确保os.environsys.path是我们开始Python解释所有的方式相同:

  • 通过Django和Apache mod_wsgi发送Web请求
  • Cron的工作
  • 通过ssh进行交互式登录
  • 芹菜工作
  • 乔布斯通过systemd开始

有没有一种常见的解决方法?

如果是,那很好:它看起来怎么样?

如果不,那么伤心:每个人都自己解决这个问题.......解决这个问题的好方法是什么?

操作系统:Linux(支持systemd)

更新

更明确:

  1. 我希望sys.path在Web请求,cron作业,从shell启动的python中都是一样的,...
  2. 我希望os.environ在Web请求,cron作业,从shell启动的python中都是一样的,...

UPDATE2

对于systemd,我们使用EnvironmentFile

UPDATE3

我们使用virtualenv

python django environment-variables sys.path

11
推荐指数
2
解决办法
927
查看次数

mod_wsgi:通过Inotify重新加载代码 - 不是每N秒

到目前为止,我按照这个建议重新加载代码:

https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki

这具有缺点,即每N秒仅检测到代码变化.我可以使用N = 0.1,但这会导致无用的磁盘IO.

AFAIK可以通过python获得linux内核的inotify回调.

是否有更快的方法来检测代码更改并重新启动wsgi处理程序?

我们在linux上使用守护进程模式.

为什么代码重新加载mod_wsgi

有兴趣为什么我想要这个.这是我的设置:

大多数人使用" manage.py runserver"进行开发,并使用其他一些wsgi部署进行生产.

在我的背景下,我们自动创建了新系统,产品和开发系统大多相同.

一个操作系统(linux)可以托管N个系统(虚拟环境).

开发人员可以使用runserver或mod_wsgi.使用runserver有一个好处,它易于调试,mod_wsgi具有不需要首先启动服务器的好处.

mod_wsgi有一个好处,你知道URL: https://dev-server/system-name/myurl/

使用runserver,您不知道端口.使用案例:您想要从内部维基链接到开发系统....

我们过去使用过mod_wsgi的代码重新加载的脏黑客攻击:maximum-requests=1但这很慢.

python django mod-wsgi inotify

11
推荐指数
1
解决办法
522
查看次数

如何在virtualenv中设置环境变量

如果我有python脚本激活virtualenv像这样:

#!/path/to/venv/bin/python
Run Code Online (Sandbox Code Playgroud)

如何在不修改此脚本的情况下为此脚本设置变量?

我希望这个环境变量对所有使用这个virtualenv的脚本都是活动的.

这意味着修改此脚本不是解决方案,因为有20个脚本,我不想修改20个脚本.

在python脚本周围编写shell包装器脚本会起作用,但我想避免这种情况.

在过去,我认为自定义sitecustomize.py可用于启动代码.但是Ubuntu(AFAIK是唯一一个这样做的发行版)附带了自己的sitecustomize.py文件,其效果是我的sitecustomize.py没有被调用.请参阅https://bugs.launchpad.net/ubuntu/+source/python2.5/+bug/197219

以下是我想要使用virtualenv的一些方法:

(我再次考虑过这个问题.我猜设置变量不是python或virtualenv的工作.我需要一种统一的方法来设置环境变量.在我的情况下,我想这样做而不使用shell包装器).

python virtualenv

11
推荐指数
1
解决办法
5510
查看次数

突然退出,状态为-9

我有一个python脚本,它返回退出状态-9.

我试图用atexit模块解决问题的根源,但它没有被调用.

任何提示,以帮助我找到我的脚本终止的原因和位置?

问题是可重现的,操作系统:linux 3.7.10

python linux exit

10
推荐指数
1
解决办法
7731
查看次数

如果缺少模板,则更好的错误消息

如果在django模板的渲染内部缺少模板,我会得到如下的异常.

经过很长时间的搜索,我找到了伪造的部分:

 {% include form.template_name %}
Run Code Online (Sandbox Code Playgroud)

form.template_name在我的上下文中为空.

如何在不搜索小时数的情况下找到相关的模板名称?

我缺少像普通python代码一样的回溯."普通"python回溯向我展示了包含bug的文件和行.

/home/foo_fm_d/bin/python /usr/local/pycharm-community-4.5/helpers/pycharm/utrunner.py /home/foo_fm_d/src/foo-time/foo_time/tests/unit/views/user/test_preview_of_next_days.py::EditTestCase::test_preview_of_next_days true
Testing started at 09:26 ...

Error
Traceback (most recent call last):
  File "/home/foo_fm_d/src/foo-time/foo_time/tests/unit/views/user/test_preview_of_next_days.py", line 11, in test_preview_of_next_days
    self.admin_client.get(url)
  File "/home/foo_fm_d/src/djangotools/djangotools/utils/testutils.py", line 275, in get
    response = super(Client, self).get(path, data, **extra)
  File "/home/foo_fm_d/local/lib/python2.7/site-packages/django/test/client.py", line 473, in get
    response = super(Client, self).get(path, data=data, **extra)
  File "/home/foo_fm_d/local/lib/python2.7/site-packages/django/test/client.py", line 280, in get
    return self.request(**r)
  File "/home/foo_fm_d/local/lib/python2.7/site-packages/django/test/client.py", line 444, in request
    six.reraise(*exc_info)
  File "/home/foo_fm_d/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 137, in get_response
    response = response.render()
  File …
Run Code Online (Sandbox Code Playgroud)

python django debugging django-templates

10
推荐指数
1
解决办法
406
查看次数

调试where方法返回None

我有一个很大的遗留Python方法,其中包含大约20个return语句.

该方法不应该返回,None但它会这样做.它在一个简单的测试用例中是可重复的.

到目前为止,我使用了一个调试器并逐行遍历代码以找到匹配的return语句.

但是有更简单的方法吗?

一旦方法返回None,有没有办法提出异常?

当然我需要看到包含return语句的行.

例:

def big_method(arg1, some_var):
    #.... many returns
    if arg1:
        return some_var # <------
    #... many returns


assert not big_method(True, None) is None
Run Code Online (Sandbox Code Playgroud)

上面是一个简单的代码片段.结果:

Traceback (most recent call last):
  File "/home/modwork_vums_d/src/manyreturns.py", line 8, in <module>
    assert not big_method(True, None) is None
AssertionError
Run Code Online (Sandbox Code Playgroud)

上面的追溯并没有多大帮助,因为我想看到内线 big_method().在上面的例子中,我想看看我标记的是哪个<------.

我使用PyCharm,但欢迎使用纯Python或其他解决方案.

仅供记录.有一个后续问题试图在PyCharm中启用此功能:PyCharm:调试:r(eturn)继续执行,直到当前函数返回

python debugging pycharm

10
推荐指数
1
解决办法
353
查看次数

通过ssh转发SIGTERM

我希望ssh将SIGTERM信号转发到远程命令.

ssh root@localhost /root/print-signal.py
Run Code Online (Sandbox Code Playgroud)

获取ssh的PID:

ps aux| grep print-signal
Run Code Online (Sandbox Code Playgroud)

杀死匹配的ssh进程:

kill pid-of-ssh
Run Code Online (Sandbox Code Playgroud)

不幸的是,只有ssh进程本身才能获得信号,而不是远程命令(print-signal.py).远程命令不会终止:-(

如何让ssh将SIGTERM信号"转发"到远程命令?

ssh signals

10
推荐指数
1
解决办法
358
查看次数