小编bal*_*lki的帖子

为什么要显式调用asyncio.StreamWriter.drain?

来自doc:https: //docs.python.org/3/library/asyncio-stream.html#asyncio.StreamWriter.write

写(数据)

Write data to the stream.

This method is not subject to flow control. Calls to write() should be followed by drain().
Run Code Online (Sandbox Code Playgroud)

coroutine drain()

Wait until it is appropriate to resume writing to the stream. Example:

writer.write(data)
await writer.drain()
Run Code Online (Sandbox Code Playgroud)

据我所知,

  • 你需要drain每次打电话都要write打电话.
  • 如果不是,我猜,write将阻止循环线程

那为什么写不是自动调用它的协同程序?为什么一个人打电话write而不必排水?我可以想到两个案例

  1. 你想writeclose立即
  2. 在消息完成之前,您必须缓冲一些数据.

第一个是特例,我想我们可以有一个不同的api.缓冲应该在写入功能内部处理,应用程序不应该在意.


让我以不同的方式提出问题.这样做有什么缺点?python3.8版本有效吗?

async def awrite(writer, data):
    writer.write(data)
    await writer.drain()
Run Code Online (Sandbox Code Playgroud)

注意:draindoc明确说明如下:

当没有什么可以等待时,drain()立即返回.


再次阅读答案和链接,我认为这些功能是这样的.注意:检查已接受的答案以获得更准确的版本

def write(data):
    remaining …
Run Code Online (Sandbox Code Playgroud)

python streamwriter python-3.x python-asyncio

6
推荐指数
1
解决办法
785
查看次数

为什么ostringstream strip为NULL?

我有一个字符串,其最后一部分(后缀)需要多次更改,我需要生成新的字符串.我正在尝试使用ostringstream执行此操作,因为使用流将比字符串连接更快.但是当前一个后缀大于后一个后缀时,它会搞砸.流也剥离了空字符.

#include<iostream>
#include<sstream>

using namespace std;

int main()
{
  ostringstream os;
  streampos pos;
  os << "Hello ";
  pos = os.tellp();
  os << "Universe";
  os.seekp(pos);
  cout<<  os.str() << endl;
  os << "World\0";
  cout<<  os.str().c_str() << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

Hello Universe
Hello Worldrse
Run Code Online (Sandbox Code Playgroud)

但我想要Hello World.我该怎么做呢?有没有其他方法可以更快的方式做到这一点?

编辑: 附加std::ends作品.但想知道它是如何在内部工作的.还想知道是否有更快的方法来做同样的事情.

c++ string-concatenation ostringstream

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

系统处于关闭状态时,cron作业会发生什么?

从crontab的手册页.

      string         meaning
      ------         -------
      @daily         Run once a day, "0 0 * * *".
      @midnight      (same as @daily)
Run Code Online (Sandbox Code Playgroud)

如果系统总是在午夜关闭,那么@daily永远不会被执行?指定我想每天运行一次这个工作的正确方法是什么,但我不关心它何时在一天内执行?

crontab

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

如何为boost :: tuple写一个`<<`运算符?

在下面的示例代码中,它显示可以从第一个模板参数隐式创建boost :: tuple.因此,我无法编写<<运算符,因为它变得模棱两可.

另外我不明白为什么ostringstream& << float也暧昧.这没有任何隐含的结构.为什么这也会给出含糊不清的错误?

#include <iostream>
#include <boost/tuple/tuple.hpp>
#include <sstream>
#include <string>

using namespace std;

class Myclass
{
};

typedef boost::tuple<int,float,Myclass> Mytuple;

ostringstream& operator<<(ostringstream& os_, Mytuple tuple_)
{
  float f = tuple_.get<1>();
  //os_ << (int)tuple_.get<0>(); // Error because int is implicitly converted into Mytuple. WHYY?
  //os_ << tuple_.get<1>();      // No Clue Why this is ambiguous.
  //os_ << tuple_.get<2>();      // Error because no matching operator. Fine.
  return os_;
}

int main()
{
  Mytuple t1;
  t1 …
Run Code Online (Sandbox Code Playgroud)

c++ ostringstream boost-tuples

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

为查找优化的哈希映射

我正在寻找一些具有固定键(在初始化期间固定)并且查找速度更快的地图.它可能不支持以后添加/更新元素.是否有一些算法可以查看键列表并制定一个函数,以便以后查找更快.在我的例子中,键是字符串.

更新:

密钥在编译时是未知的.但在应用程序的初始化时间.以后不会再进行任何插入,但会有很多查找.所以我想要优化查找.

c++ hash string-hashing data-structures

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

当我输入`:q`或`:qa`时,如何让gvim主窗口不退出?

相反,我希望它关闭文件并打开默认No Name缓冲区.我有时不小心关闭了最后一个文件,我必须重启gvim并cd到正确的目录.

vim

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

在简单的情况下使用scoped_ptr是否有些过分?

我在这样的小函数中使用scoped_ptr.所以我不必调用删除.对于这种用法,这是否有点过分?我的团队成员更喜欢原始指针和删除.如果碰巧在非常关键的路径中使用scoped_ptr,那么使用它的成本是多少?这不应该是内联的,并且完全等同于在优化的二进制文件中使用普通删除吗?

void myfunc()
{
  boost::scoped_ptr<myobj> objptr = someFactory::allocate();
  callsomeotherfunc(objptr.get());
}
Run Code Online (Sandbox Code Playgroud)

c++ boost scoped-ptr

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

lxml中的通配符名称空间

如何使用xpath查询忽略xml命名空间?我正在使用python lxml库.我尝试了这个问题的解决方案,但似乎没有用.

In [151]: e.find("./*[local-name()='Buckets']")
  File "<string>", line unknown
SyntaxError: invalid predicate
Run Code Online (Sandbox Code Playgroud)

python xml xpath lxml

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

argparsemutual_exclusive_group 与子组

我正在尝试制作一个脚本,其用法如下:

my_script [-p parg -l larg] | [-s sarg]
Run Code Online (Sandbox Code Playgroud)

即脚本要么采用-p参数-l要么参数 -s。如果同时指定-p和 ,则会出错。-s我尝试了以下但似乎不起作用

import argparse
parser = argparse.ArgumentParser(description='Some Desc')
gp = parser.add_mutually_exclusive_group()
num_gp = gp.add_argument_group()
num_gp.add_argument('-p')
num_gp.add_argument('-l')
gp.add_argument('-s')
In [18]: parser.parse_args(['-p blahp', '-l blahl', '-s blahs'])
Out[18]: Namespace(l=' blahl', p=' blahp', s=' blahs') #ERROR Should have failed as I specify both `-p` and `-s` which belong to a mutually_exclusive_group
Run Code Online (Sandbox Code Playgroud)

python argparse

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

创建自定义sqlalchemy类型

我想在桌子上保存ipaddress.创建自定义类型如下:

class MCastIP(sqlalchemy.types.TypeDecorator):
  impl = sqlalchemy.types.Integer
  def process_bind_param(self, value, dialect):
    return int(IPAddress(value))
  def process_result_value(self, value, dialect):
    return IPAddress(value)
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但只是想知道我是否必须实现任何其他功能完成.例如:python_type.需要以下吗?什么时候会被调用,如何明确调用并测试它的工作原理?

def python_type(self):
   return IPAddress
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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