我正在阅读类表继承(CTI),发现我更喜欢它.我的问题是,单表继承(STI)是否有任何特定用例,您可以在CTI上使用它?
我读了http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance,据我所知,它很稳固.STI的用例是行为差异而不是数据.
我们遇到了这个错误:
http://bugs.python.org/issue1856守护程序在解释器关闭期间断言段错误.
现在我搜索一种代码来解决这个bug.
目前代码如下所示:
while True:
do_something()
time.sleep(interval)
Run Code Online (Sandbox Code Playgroud)
有没有办法在do_something()之前检查解释器是否仍然可用?
或者最好不要执行mythread.setDaemon(True)并检查主线程是否已退出?
您是否将foo.egg_info目录保留在版本控制中?
这是一个在VC中使用它的例子:
pip install -e foofoo.egg-info/entry_points.txt)setup.py再次呼叫即可使用新的EntryPoint我想,以确保os.environ和sys.path是我们开始Python解释所有的方式相同:
有没有一种常见的解决方法?
如果是,那很好:它看起来怎么样?
如果不,那么伤心:每个人都自己解决这个问题.......解决这个问题的好方法是什么?
操作系统:Linux(支持systemd)
更新
更明确:
sys.path在Web请求,cron作业,从shell启动的python中都是一样的,...os.environ在Web请求,cron作业,从shell启动的python中都是一样的,...UPDATE2
对于systemd,我们使用EnvironmentFile
UPDATE3
我们使用virtualenv
到目前为止,我按照这个建议重新加载代码:
https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki
这具有缺点,即每N秒仅检测到代码变化.我可以使用N = 0.1,但这会导致无用的磁盘IO.
AFAIK可以通过python获得linux内核的inotify回调.
是否有更快的方法来检测代码更改并重新启动wsgi处理程序?
我们在linux上使用守护进程模式.
有兴趣为什么我想要这个.这是我的设置:
大多数人使用" 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脚本激活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脚本,它返回退出状态-9.
我试图用atexit模块解决问题的根源,但它没有被调用.
任何提示,以帮助我找到我的脚本终止的原因和位置?
问题是可重现的,操作系统:linux 3.7.10
如果在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方法,其中包含大约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)继续执行,直到当前函数返回
我希望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信号"转发"到远程命令?