来自PyPubSub:
Pypubsub为您的Python应用程序提供了一种简单的方法来解耦其组件:应用程序的某些部分可以发布消息(有或没有数据),其他部分可以订阅/接收它们.这允许消息"发件人"和消息"听众"彼此不知道:
- 一个不需要导入另一个
- 发件人不需要知道
- "谁"得到消息,
- 听众会对数据做些什么,
- 或者即使任何听众都会收到消息数据.
- 同样,听众也不必担心消息的来源.
这是实现模型 - 视图 - 控制器架构或促进其组件解耦的任何类似架构的绝佳工具.
似乎有相当多的Python模块用于在Web上发布/订阅,从PyPubSub到PyDispatcher,再到简单的"自制"类.
比较不同的模块时是否有特定的优点和缺点?哪些模块已经过基准测试和比较?
提前致谢
用于weakref模块的Python 2.7文档说:
并非所有对象都可以被弱引用; 那些可以包含类实例的对象,用Python编写的函数(但不是用C编写的),方法(绑定和非绑定),...
而对于weakref模块的Python 3.3文档说:
并非所有对象都可以被弱引用; 那些可以包含类实例的对象,用Python编写的函数(但不是在C中),实例方法,......
对我来说,这些表明对绑定方法的弱化(在所有版本的Python 2.7 - 3.3中)应该是好的,并且对于未绑定的方法的弱引用应该在Python 2.7中很好.
然而在Python 2.7中,为方法(绑定或未绑定)创建弱参数会导致死弱点:
>>> def isDead(wr): print 'dead!'
...
>>> class Foo:
... def bar(self): pass
...
>>> wr=weakref.ref(Foo.bar, isDead)
dead!
>>> wr() is None
True
>>> foo=Foo()
>>> wr=weakref.ref(foo.bar, isDead)
dead!
>>> wr() is None
True
Run Code Online (Sandbox Code Playgroud)
不是我根据文档所期望的.
类似地,在Python 3.3中,绑定方法的弱参数在创建时死亡:
>>> wr=weakref.ref(Foo.bar, isDead)
>>> wr() is None
False
>>> foo=Foo()
>>> wr=weakref.ref(foo.bar, isDead)
dead!
>>> wr() is None
True
Run Code Online (Sandbox Code Playgroud)
再次不是我根据文档所期望的.
由于这个措辞自2.7以来一直存在,它肯定不是一个疏忽.任何人都可以解释这些陈述和观察到的行为实际上并不矛盾吗?
编辑/澄清:换句话说,3.3的陈述说"实例方法可能被弱引用"; 这是不是意味着期望weakref.ref(一个实例方法)()不是None是合理的?如果它是None,那么"实例方法"不应该列在可以弱引用的对象类型中?
我试图声明,如果变量为 true 或不存在(即 var 的默认值为 true),则应存在 helm 模板中的代码块。以下作品:
{{- if or .Values.livenessProbe (not (hasKey .Values "livenessProbe")) }}
...
{{- end }}
Run Code Online (Sandbox Code Playgroud)
这看起来很复杂,有没有更简单的?我尝试了default几种方法来使用函数,但它们都会导致忽略该值(存在或不存在,真或假,块总是被渲染):
{{- if (default true .Values.livenessProbe) }}
...
{{- end }}
Run Code Online (Sandbox Code Playgroud) 对于全局_G[name]变量,name如果您有一个字符串"name",则可以使用它来访问全局变量:
function setGlobal(name, val)
_G[name] = val
end
Run Code Online (Sandbox Code Playgroud)
如果你有
-- module.lua
local var1
local var2
Run Code Online (Sandbox Code Playgroud)
没有_L,这将允许你做当地人的等价物:
function setLocal(name, val)
_L[name] = val -- _L doesn't exist
end
Run Code Online (Sandbox Code Playgroud)
是否有另一种方法可以通过表示其名称的字符串访问本地变量?
我的系统上有 docker-compose 1.25.4 和 docker 19.03。我如何知道它支持哪个版本的 Compose 文件格式,而无需尝试一堆或搜索发行说明等?
经过反复试验,我确定 docker-compose 1.25.4 支持的最高 Compose 文件格式版本是 3.7。因此,我的 docker-compose.yml 需要version: "3.7".
但如果我需要以编程方式确定这一点怎么办?或者可靠,无需反复试验,也无需查看发行说明?
https://docs.docker.com/compose/compose-file/compose-versioning/上的文档建议最高版本应该是 3.8,但这不起作用。事实上,发行说明表明从 docker-compose 1.25.5 开始支持 3.8。
我查看了各种 docker-compose 命令,但找不到任何“此版本的 docker-compose 支持最高 xy 的 Compose 文件版本”的内容。
以下编译在VS 2005中,但未在2010年或2012年编译:
#include <string>
template <typename TT> TT getAs();
template <> std::string getAs() { return "bye"; }
template <> int getAs() { return 123; }
class Foo
{
public:
template <typename TT>
TT getAs() const { return ::getAs<TT>(); }
template <typename TT>
operator TT() const { return ::getAs<TT>(); }
};
Foo tempFoo() { return Foo(); }
int main()
{
Foo foo;
std::string testStringLocal = foo; // OK in 2010, FAIL in 2012
int testIntTemp = tempFoo(); // OK
std::string testStringTemp …Run Code Online (Sandbox Code Playgroud) 我需要在我从官方“ubuntu”Docker 映像构建的自定义 Docker 容器中安装 Python 包,因此我想尽量减少它使用的空间。Python3 安装正常并运行,但由于某种原因,不包括 pip。
所以我通过 安装apt install python3-pip,这有效,但它是一个惊人的 300 megs 并且需要几分钟的时间来安装(显然是因为它安装了 sh*load 的东西来从 gcc 等构建二进制包)。
当然,我可以在安装我想要的依赖项后从映像中卸载 python3-pip,另外还可以apt autoremove用来摆脱 299 megs。但是,这还需要一分钟。
因此,尽管上述方法有效,但它显着增加了我的 Docker 映像的构建时间。所以我尝试看看是否有一种无需pip即可安装依赖项的方法:
我尝试.tar.gz从 PyPI下载依赖项,提取并尝试python3 setup.py install,但这给我带来了一个奇怪的错误:
Traceback (most recent call last):
File "setup.py", line 59, in <module>
from distutils import log
ImportError: cannot import name 'log'
Run Code Online (Sandbox Code Playgroud)
我想也许我需要安装 setuptools 或升级 distutils。
我尝试get-pip.py从官方网站使用,但也失败了:
Traceback (most recent call last):
File "get-pip.py", line 20890, in <module>
main()
File "get-pip.py", …Run Code Online (Sandbox Code Playgroud) 我正在使用python 2.7 win32com模块从Python加载MS Excel工作表:
book = xlApp.Workbooks.Open("myFile.xls")
sheet = book.Sheets(1)
Run Code Online (Sandbox Code Playgroud)
Range,Worksheet等的许多方法和属性都使用XlDirection,XlFillWith等枚举.这些定义了常量,例如xlDown,xlUp,xlFillWithContents等.这些常量可以从win32com获得,以便我可以做,例如:
column = outputsSheet.Range("I5:I150")
lastRow = column.End(xlInterop.xlDown)
print "Last row:", lastRow.Row
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为没有定义xlInterop,有没有办法使用win32com访问它?通过反复试验发现xlDown等常量的值是不太实际的.
因此,从Python/Flask文档中,他们都建议不要将Flask Web服务器作为生产Web服务器运行,这是有意义的.我的问题是,我能够在Nginx服务器上运行我的Flask应用程序吗?为什么互联网上的所有指南都建议在UWSGI,Tornado或其他一些WSGI服务器上包装Flask?WSGI是什么意思?Flask WGSI不兼容吗?
我特别迷失,因为在这里,第一个回应指出:
Apache和Nginx都是HTTP服务器.它们可以提供静态文件,如(.jpg和.html文件)或动态页面(如Wordpress博客或用PHP或Python等语言编写的论坛).
不过这篇文章指出:
Nginx是一个Web服务器.它提供静态文件,但它无法执行和托管Python应用程序.uWSGI填补了这一空白.
我的应用程序由服务器(例如:uWSGI)和另一台服务器(例如:Nginx)处理似乎效率低下.
我default_tags在根模块中使用 terraform aws 提供程序块my_terraform。该模块有一个名为 的子模块my_submodule,我想在该子模块中添加其他默认标签。我在以下位置尝试过my_terraform/my_submodule/main.tf:
provider "aws" {\n default_tags {\n tags = {\n "extra_tag" = "something"\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但我收到这个错误:
\n$ terraform init\nInitializing modules...\n- my_terraform.my_submodule in my_terraform/my_submodule\nThere are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that\nTerraform can determine which modules and providers need to be installed.\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Module module.my_submodule contains provider configuration\n\xe2\x94\x82 \n\xe2\x94\x82 Providers cannot be configured within modules using count, for_each …Run Code Online (Sandbox Code Playgroud)