小编JJC*_*JJC的帖子

为什么在C++中读取stdin的行比Python要慢得多?

我想比较使用Python和C++从stdin读取字符串的读取行,并且看到我的C++代码运行速度比等效的Python代码慢一个数量级,这让我很震惊.由于我的C++生锈了,我还不是专家Pythonista,请告诉我,如果我做错了什么或者我是否误解了什么.


(TLDR回答:包括声明:cin.sync_with_stdio(false)或者只是fgets改用.

TLDR结果:一直向下滚动到我的问题的底部并查看表格.)


C++代码:

#include <iostream>
#include <time.h>

using namespace std;

int main() {
    string input_line;
    long line_count = 0;
    time_t start = time(NULL);
    int sec;
    int lps;

    while (cin) {
        getline(cin, input_line);
        if (!cin.eof())
            line_count++;
    };

    sec = (int) time(NULL) - start;
    cerr << "Read " << line_count << " lines in " << sec << " seconds.";
    if (sec > 0) {
        lps = line_count / sec;
        cerr << " LPS: " << lps …
Run Code Online (Sandbox Code Playgroud)

c++ python benchmarking iostream getline

1738
推荐指数
10
解决办法
25万
查看次数

为什么在C++中使用比Python更慢的字符串拆分?

我正在尝试将一些代码从Python转换为C++,以便获得一点速度并提高我生锈的C++技能.昨天我感到震惊的是,在Python中,从stdin读取行的简单实现要比C++快得多(参见本文).今天,我终于想出了如何在C++中使用合并分隔符(与python的split()类似的语义)拆分字符串,现在我正在体验似曾相识!我的C++代码需要更长的时间才能完成工作(尽管不是一个数量级,就像昨天的课程一样).

Python代码:

#!/usr/bin/env python
from __future__ import print_function                                            
import time
import sys

count = 0
start_time = time.time()
dummy = None

for line in sys.stdin:
    dummy = line.split()
    count += 1

delta_sec = int(time.time() - start_time)
print("Python: Saw {0} lines in {1} seconds. ".format(count, delta_sec), end='')
if delta_sec > 0:
    lps = int(count/delta_sec)
    print("  Crunch Speed: {0}".format(lps))
else:
    print('')
Run Code Online (Sandbox Code Playgroud)

C++代码:

#include <iostream>                                                              
#include <string>
#include <sstream>
#include <time.h>
#include <vector>

using namespace std;

void split1(vector<string> &tokens, const string …
Run Code Online (Sandbox Code Playgroud)

c++ python string benchmarking split

91
推荐指数
2
解决办法
1万
查看次数

是否有一种优雅的方式通过迭代循环遍历列表N次(如itertools.cycle但限制循环)?

我想通过迭代器重复遍历列表(N次),以便不在列表中实际存储N个副本.有没有内置或优雅的方式来做到这一点,而无需编写自己的发电机?

理想情况下,itertools.cycle(my_list)会有第二个参数来限制它循环的次数...唉,没有这样的运气.

python iterator

12
推荐指数
5
解决办法
2089
查看次数

在Google Cloud SQL(GAE)Python应用程序中管理数据库连接的好方法是什么?

我只是在学习Google App Engine,并试图想出一个很好的方法来管理我与Google Cloud SQL实例的数据库连接(如果你还没有使用GC-SQL,基本上,它是云中的MySQL,有一些限制).

我正在使用带有webapp2框架的python(2.7)GAE环境来处理请求.我知道常见问题解答说,建议每次请求都要与DB建立新的连接,但我不知道建议的关闭连接的方法是什么.每次我尝试在开发过程中删除表时,GC-SQL挂起并且"show processlist"显示有一堆进程(可能是因为我没有关闭数据库)并且其中一个正在等待锁定(可能是这个过程试图放弃表格).这很烦人,迫使我重新启动GC-SQL实例(比如重新启动mysql-server服务,我想).我还认为偶尔存在数据库打嗝,这与我没有真正关闭数据库连接这一事实有关.

那么,例如,我的webapp2.Requesthandler子类实例上是否应该有一个析构函数来断开与DB的连接?GAE对象有时似乎被缓存,所以这也是需要考虑的事情.我想我可以为每个查询连接/查询/断开连接,但这似乎不是最理想的.

我知道这是一个模糊的问题,但我希望在这个领域有所作为的人可以按我的方式提出一些提示.

提前致谢!

更新: 我尝试使用Shay的答案作为起点,围绕需要cursot的方法实现一个包装器.我收到了GAE错误.以下是一个特定于此的新问题:App Engine中Google Cloud SQL的连接限制是什么,以及如何最好地重用数据库连接?

python mysql google-app-engine webapp2 google-cloud-sql

10
推荐指数
2
解决办法
4225
查看次数

如何通过Google Cloud Build中的步骤设置环境或替换变量?

基本上,在使用Google Cloud Build时,如何读取在后续步骤中先前构建步骤中写入的值?

具体来说,我想制作一个基于时间戳和$ SHORT_SHA组合的自定义图像标签。如下所示。但是,它不起作用,因为docker抱怨“导出”,即使起作用,它也可能是另一个env:

  # Setting tag in a variable:
  - name: 'ubuntu'
    args: ['export', '_BUILD_TAG=`date', '-u', '+%Y%m%dT%H%M%S_$SHORT_SHA`']
Run Code Online (Sandbox Code Playgroud)

然后,在后续步骤中:

  # Using tag from the variable:
  - name: gcr.io/cloud-builders/docker
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/$_BUILD_TAG', '.']
Run Code Online (Sandbox Code Playgroud)

那么,如何使用一步的输出呢?我可以将的内容写到date文件中,然后读取它,但是我回到不知道如何从读取的文件中设置变量(或者以其他方式插值其结果以构成docker build的参数)。

docker google-cloud-platform kubernetes google-cloud-build

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

如何快速搜索项目中包含的特定函数或宏的头文件?

这是我最近遇到的一个问题,这对他人来说是一个常见的痛苦.

我正在使用其他人的遗留C代码,需要找到定义函数或宏的位置.#include除了特定项目的代码之外,代码还有许多不同的标准系统库.

是否有工具或技术可以快速找到特定功能,宏(或其他全局)的定义?

我试过了:

grep -R 'function' /usr/lib
Run Code Online (Sandbox Code Playgroud)

和其他类似的*nix/bash-fu一样,只取得了有限的成功,而且还有许多烦人的糠.. 你们其中一位圣人的编码员必须有一个很好的解决方案来解决这个看似常见的情况.

我很惊讶在这里或在搜索互联网时没有找到关于这种特殊疼痛的另一个问题.(如果我错过了一个,我肯定会有愤怒的评论...... ;-))

提前感谢任何提示!

c c++ search header-files

9
推荐指数
1
解决办法
1024
查看次数

App Engine中的Google Cloud SQL有哪些连接限制,以及如何最好地重用数据库连接?

我有一个Google App Engine应用程序,它使用Google Cloud SQL实例存储数据.我需要我的实例能够通过休息调用一次为数百个客户端提供服务,每个客户端都会产生一个或几个数据库查询.我已经包装了需要DB访问的方法,并将句柄存储到os.environ中的DB连接.看看这个问题/答案基本上我是怎么做的.

但是,只要有几百个客户端连接到我的应用程序并触发数据库调用,我就会在Google App Engine错误日志中开始收到这些错误(当然,我的应用程序返回500):

could not connect: ApplicationError: 1033 Instance has too many concurrent requests: 100 Traceback (most recent call last): File "/base/python27_run
Run Code Online (Sandbox Code Playgroud)

Google App Engine和Google Cloud SQL的有经验用户提供的任何提示?提前致谢.

这是我使用需要DB连接的方法的装饰器的代码:

def with_db_cursor(do_commit = False):
    """ Decorator for managing DB connection by wrapping around web calls.
    Stores connections and open connection count in the os.environ dictionary
    between calls.  Sets a cursor variable in the wrapped function. Optionally
    does a commit.  Closes the cursor when wrapped method …
Run Code Online (Sandbox Code Playgroud)

python mysql google-app-engine wsgi google-cloud-sql

9
推荐指数
2
解决办法
6076
查看次数

无法在 sqlalchemy 中对 @hybrid_property 应用过滤器

代码很简单:

Class A(Base):
    status = Columns(Integer)

    @hybrid_property
    def is_ok(self):
        return self.status > 0
Run Code Online (Sandbox Code Playgroud)

session.query(A).filter(A.is_ok).all()
Run Code Online (Sandbox Code Playgroud)

将引发异常:TypeError: Boolean value of this clause is not defined

我试过了print result[0].is_ok, type(result[0].is_ok)。它是True <type 'bool'>

那么我怎样才能过滤基于 hybrid_property


我的答案

在@van 的帮助下,我知道该怎么做。

argfilter(*criterion)应该是一个SQL 表达式对象。我曾经认为它需要一个布尔值作为参数,不是

条件是适用于选择的 WHERE 子句的任何 SQL 表达式对象。字符串表达式通过 text() 构造被强制转换为 SQL 表达式构造。

代码告诉:

# wrong code:
@is_ok.expression
def is_ok(self):
    return self.status > 30 and self.status < 90

# correct code:
from sqlalchemy.sql import and_ …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy

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

如何在基于rpm的机器上安装lz4共享库?

我试图在CentOS中安装lz4库,但没有出现以下错误.

[Bash]# yum install liblz4 liblz4-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net 
 * extras: centos.excellmedia.net 
 * updates: centos.excellmedia.net 
No package liblz4 available. 
No package liblz4-devel available. 
Error: Nothing to do 
[Bash]#
Run Code Online (Sandbox Code Playgroud)

设置liblz4.so的正确方法是什么?

此外,我无法找到CentOS的lz4 rpm软件包,但可用于其他基于rpm的操作系统.CentOS支持lz4吗?

centos rpm yum lz4

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

如何获取 GCP Cloud Function 实际调用的 URL,包括查询参数(Python 运行时)

在使用Python环境的GCP Cloud Function中,我想获取整个实际的http请求URL。通常,Flask 通过 公开此信息request.url。然而,在云函数环境中,请求对象似乎由GCP操纵,因此request.url不提供带有查询参数的实际完整URL。例如,如果我发布到我的函数:

https://us-east1-my-project.cloudfunctions.net/func-name?test=true

的值为request.url(注意方案):

http://us-east1-my-project.cloudfunctions.net?test=true

我在文档中找不到任何可以解释这一点的内容。似乎实际的函数名称可以作为环境变量(FUNCTION_NAME)使用,但我必须使用它重新组装 URL,包括猜测/希望该方案是 HTTPs,这似乎是一种丑陋的方法。 。谢谢。

python flask google-cloud-platform google-cloud-functions

5
推荐指数
0
解决办法
1382
查看次数

如何捕获 python PubSub 订阅者中发生在内部/库线程中的异常?

我正在运行 pubsub 消费者,它们以每秒大约一条的速度处理传入消息。事情通常工作正常,但是,每隔几天或几个小时,我们偶尔会看到 pubsub 模块内部线程抛出异常,并且我不清楚如何捕获它们。这是一个典型的示例(也会出现其他类似的跟踪,但消息略有不同):

Exception in thread Thread-LeaseMaintainer:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 549, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 466, in _end_unary_response_blocking
    raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
    status = StatusCode.UNAVAILABLE
    details = "channel is in state TRANSIENT_FAILURE"
    debug_error_string = "{"created":"@1554568036.075280756","description":"channel is in state TRANSIENT_FAILURE","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":2294,"grpc_status":14}"
>

The above exception was the direct cause of the following …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-platform google-cloud-pubsub

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