我怎样才能从期货集合中等待任何未来,有选择地通知其他期货“不再需要它们”?
这就是我需要这个的原因。我想创建一种特殊的期货/任务来计时,并且可以与其他期货/任务一起使用以在它们累积超过某个超时(或在与此计时任务交互后被迫停止)时取消它们。如果您熟悉 Go,它有一个类似的概念,称为Context.
为了使这更具体,想象一下。您有一个典型的 HTTP 客户端。为了从 URL 请求页面,它需要连续执行几个可能永远阻塞的操作。例如,这些操作可以是:
假设您允许整个操作需要一分钟。但是您也知道分配套接字的时间不应超过一毫秒,连接也可能需要一分钟,检索块也是如此。断开连接和资源释放应该需要几毫秒。
假设现在您必须在每个项目符号点上等待完全超时——嗯,您已经超过了两次配额。因此,您需要将每次调用的计算增量传递给其后继调用。此外,假设您无法释放套接字——好吧,没什么大不了的,应用程序可能会从此错误中恢复,因此您还需要区分各种超时。我想这可以这样写(在某些虚构的 Python 版本中):
async def http_request(context, url):
socket = await min(allocate_socket(), context.timeout, socket_timeout)
await min(socket.connect(), context.timeout, connect_timeout)
async for chunk in min(socket.receive(), context.timeout, chunk_timeout):
print(chunk)
await min(socket.close(), context.timeout, close_timeout)
Run Code Online (Sandbox Code Playgroud) 假设您有一种允许这样生成的语言:optional optional = 42,其中第一个"可选"是关键字,第二个"可选"是标识符.
一方面,我希望有一个类似于Lex的规则optional { return OPTIONAL; },以后会在YACC中使用,例如:
optional : OPTIONAL identifier '=' expression ;
Run Code Online (Sandbox Code Playgroud)
如果我然后定义identifier为,说:
identifier : OPTIONAL | FIXED32 | FIXED64 | ... /* couple dozens of keywords */
| IDENTIFIER ;
Run Code Online (Sandbox Code Playgroud)
它只是感觉很糟糕...此外,我需要两种标识符,一种用于何时允许关键字作为标识符,另一种用于何时不是...
有没有习惯的方法来解决这个问题?
我正在开发一个 C 扩展,现在我想追踪内存泄漏。通过阅读 Python 的文档,很难理解何时增加/减少 Python 对象的引用计数。此外,在花了几天时间尝试嵌入 Python 解释器(为了将扩展编译为独立程序)之后,我不得不放弃这项努力。所以,像 Valgrind 这样的工具在这里是无能为力的。
到目前为止,通过反复试验,我了解到,例如,这Py_DECREF(Py_None)是一件坏事……但这是否适用于任何常数?我不知道。
到目前为止,我的主要困惑可以这样列出:
PyWhatever_New()如果它不超过创建它的程序,我是否必须减少它创建的任何东西的refcount?Py_INCREF需要与 匹配Py_DECREF,还是应该有一个/另一个?PyObject*,我是否需要增加它以确保我仍然可以使用它(永远),或者减少它以确保最终它会被垃圾收集,或者两者都不需要?Py_INCREF在堆上重新分配它们)。log2(x) := log(x) / log(2);
log2(8), float;
Run Code Online (Sandbox Code Playgroud)
但这并没有给出 3,而是得到log(8)/log(2)。
我正在阅读包中的文档Protocol和Transport类asyncio.特别:
子类化协议类时,建议您覆盖某些方法.这些方法是回调:它们将由传输在某些事件上调用(例如,当收到某些数据时); 你不应该自己打电话,除非你正在实施运输.
强调补充说
因此,原则上应该可以实现运输,但......
传输是asyncio提供的类,用于抽象各种通信信道.您通常不会自己实例化运输; 相反,您将调用一个AbstractEventLoop方法 (哪一个?),它将创建传输并尝试启动底层通信通道,并在成功时回拨您.
再次强调了重点
阅读关于AbstractEventLoop的部分,我没有看到任何创建自定义传输的方法.它最接近的AbstractEventLoop.create_connection(protocol_factory, host=...)只是暗示它会创造某种插座......
好吧,我的最终目标是使用一个自定义传输,它不是任何类型的套接字(也许StringIO是一个数据库连接游标,也许是另一种协议).
那么,这只是一个很好的但是从未在文档中实现过的错误,或者实际上是否有一种方法可以实现自定义传输而无需修补猴子asyncio并牺牲第一胎?
例如:
def foo():
'''
.. highlight:: python
import sys
'''
Run Code Online (Sandbox Code Playgroud)
不产生所需的输出(它逐字打印单词“ highlight”,并且不以任何特殊方式格式化以下代码)。也会发生同样的情况code-block。
我尝试了不同的缩进等。无论如何,生成器以大致相同的方式成功,但未获得所需的输出。
Error creating broker listeners from 'PLAINTEXT://:tcp://10.99.149.156:9092': No security protocol defined for listener PLAINTEXT://:TCP
Run Code Online (Sandbox Code Playgroud)
这是完整的消息
这看起来像糟糕的配置。我认为它不应该同时是“纯文本”和“tcp”。这个配置可能来自哪里?这个 Kafka 来自wursmeister/kafkaDocker 镜像。这一直有效到大约一周前。但我不知道它究竟在多久前发生了变化,因为 Docker 并没有真正允许跟踪版本/缓存管理非常差。
我正在关注 Django 教程,并被困在它要求我用我自己的模板替换网站管理部分的默认模板的地方。问题是模板名称中的拼写错误。我怀疑肯定存在这样的问题,但是为了解决该问题,查看 Django 的某种报告以了解它用于呈现特定页面的模板会非常有帮助。有什么办法可以做到这一点吗?
在 GitLab 作业描述中,可以指定阶段,其中作业将按阶段分组并并行执行。想象一下我想要执行以下操作:
由于没有嵌套阶段,我可以尝试同时构建发布和调试二进制文件,然后构建两个映像。但是,这是非常低效的,因为其中一个构建比另一个构建花费的时间要长得多,但是,我无法开始为先完成的构建创建图像。
如果能够安排 Docker 镜像构建工作在第一个构建完成后立即开始,那就完美了。一种可能的方法是,如果我可以指定嵌套阶段,其中,阶段build-all有两个嵌套阶段:build-release和build-debug,每个阶段由两个作业组成:build-release-binary, build-release-image, 以及类似的build-debug-binary, build-debug-image。
由于我是 GitLab 的新手,我也希望得到否定的答案,即知道这是不可能的也很有用。
我已经看到了:gitlab-ci.yml中的“ git clone project2”?以及类似答案的类似帖子,暗示一个人应该使用Git子模块。
在我的案例中,如果不讨论有关Git中的子模块是否工作正常的争论,那根本就不是一个选择(要检查的其他项目取决于传递给作业触发器的论点,或者至少取决于它。应该)。
另一个要求是,我需要能够跟踪启动触发器链的用户。即,对我的个人令牌进行硬编码,或者只是任何令牌都不会这样做:我需要GitLab来使用执行作业的用户的权限才能克隆其他存储库。
除了放弃GitLab并寻找成熟的CI替代方案之外,还有什么方法可以做到这一点?
我有这个代码:
def advertiser_table(engine):
return Table('advertiser', metadata, autoload=True, autoload_with=engine)
Run Code Online (Sandbox Code Playgroud)
后来我试试这个:
advertisers = advertiser_table(engine)
...
session.bulk_insert_mappings(
advertisers.name,
missing_advetisers.to_dict('records'),
)
Run Code Online (Sandbox Code Playgroud)
missing_adverisers熊猫在哪里DataFrame(但对于这个问题并不重要).
这给我的错误是:
sqlalchemy.orm.exc.UnmappedClassError: Class ''advertiser'' is not mapped
Run Code Online (Sandbox Code Playgroud)
从阅读文档中我可以争先恐后地提出这个问题,但不仅仅是那个......这是什么Mapper以及为什么它对这个库的功能如此不利?为什么"类"没有映射?显然,我该怎样做才能将它"映射"到这个图书馆想要映射的内容?
我真的更喜欢一个有效的例子来解释.无论我到目前为止在Bison的文档网站上所阅读的内容都与Flex所说的相矛盾.有人说要宣布yylex为
int yylex (yyscan_t yyscanner);
Run Code Online (Sandbox Code Playgroud)
另一个人希望它是:
int yylex(YYSTYPE *lvalp, YYLTYPE *llocp);
Run Code Online (Sandbox Code Playgroud)
我真正需要的是位置信息.我现在还不确定是否需要YYSTYPE(我现在没有使用这些信息,但将来我可能会这样做).
与上述无关,作为奖励,我很有兴趣知道为什么这个基础设施如此糟糕.这似乎是一件非常直截了当的事情,但它却非常糟糕.它从不适用于默认值.即使编写一个最简单的教科书计算器示例,也需要多天修复配置错误...为什么?
python ×6
gitlab ×2
yacc ×2
apache-kafka ×1
bison ×1
cpython ×1
django ×1
docker ×1
flex-lexer ×1
gitlab-ci ×1
lex ×1
logarithm ×1
maxima ×1
parsing ×1
reflection ×1
sqlalchemy ×1