小编jer*_*uki的帖子

管理从Python连接到redis

redis-py在我的python应用程序中使用在Redis数据库中存储简单变量或变量列表,所以我认为每次我需要保存或检索变量时创建与redis服务器的连接会更好,因为这不是经常并且不希望永久连接可能会超时.

阅读一些基本教程,我使用Redis类创建了连接,但没有找到关闭连接的方法,因为这是我第一次使用Redis.我不确定我是否使用最好的方法来管理连接,所以我想为此提出一些建议.这就是我现在变量setget变量的方式:

import redis

def getVariable(variable_name):
    my_server = redis.Redis("10.0.0.1")
    response = my_server.get(variable_name)
    return response

def setVariable(variable_name, variable_value):
    my_server = redis.Redis("10.0.0.1")
    my_server.set(variable_name, variable_value)
Run Code Online (Sandbox Code Playgroud)

我基本上使用这段代码来存储最后的连接时间,或者为我的应用程序和类似的东西获得每秒平均请求数.

谢谢你的建议.

python connection redis

45
推荐指数
1
解决办法
4万
查看次数

在Redis中获取具有正确类型的值

我在我的python应用程序中使用redis来存储简单的值,如计数器和时间戳列表,但是试图获得一个计数器并将其与数字进行比较我遇到了一个问题.

如果我做:

import redis
...
myserver = redis.Redis("localhost")
myserver.set('counter', 5)
Run Code Online (Sandbox Code Playgroud)

然后尝试获得这样的值:

if myserver.get('counter') < 10:
     myserver.incr('counter')
Run Code Online (Sandbox Code Playgroud)

然后我在if语句中得到一个类型错误,因为我正在比较'5'<10,这意味着我存储一个整数值并获得一个字符串(可以认为是一个不同的值).

我的问题是:这应该是那样的吗?我的意思是它是一个非常基本的类型,我理解我是否必须解析对象而不是int?似乎我做错了什么.

有什么配置我不见了?

有没有办法让redis返回正确的类型而不总是一个字符串?我这样说是因为它对于列表和日期时间甚至是浮点值都是一样的.

这可能是我正在使用的redis-py客户端的问题,而不是redis本身?

python types type-conversion redis

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

在窗口中使用python的绝对unix路径

我正在创建一个将blob文件存储到硬盘驱动器中的应用程序,但是这个脚本必须在linux和windows中运行,问题是我想从文件系统根目录给它一个绝对路径而不是相对于项目文件的一个,这是因为我使用git而不想处理从同步中排除所有这些文件.

所以我希望有这样的东西:

path = '/var/lib/blob_files/'
file = open(path+'myfile.blob', 'w')
Run Code Online (Sandbox Code Playgroud)

并在unix中获取一个文件:

/var/lib/blob_files/myfile.blob
Run Code Online (Sandbox Code Playgroud)

在窗口:

C:\var\lib\blob_files\myfile.blob
Run Code Online (Sandbox Code Playgroud)

它也可能是相对于用户主文件夹(/ home中的/ home/user和Windows中的C:/ Users/User)但我猜问题非常相似.

我怎样才能实现这一目标?是否有任何库或函数可以帮助我透明地转换此路径,而不必询问脚本一直在运行什么plataform?

在我的两个选项中,绝对从root或相对于home文件夹,你建议使用哪一个?

提前感谢您对此提出的任何建议

python unix windows cross-platform path

25
推荐指数
1
解决办法
3万
查看次数

优化PostgreSQL的计数查询

我在postgresql中有一个表,其中包含一个不断更新的数组.

在我的应用程序中,我需要获取该数组列中不存在特定参数的行数.我的查询如下所示:

select count(id) 
from table 
where not (ARRAY['parameter value'] <@ table.array_column)
Run Code Online (Sandbox Code Playgroud)

但是当增加行的数量和该查询的执行量(每秒几次,可能是数百或数千)时,性能会下降很多,在我看来,postgresql中的计数可能具有线性执行顺序(I我不完全确定这一点.

基本上我的问题是:

是否有一种我不知道的现有模式适用于这种情况?什么是最好的方法呢?

你能给我的任何建议都会非常感激.

postgresql count database-performance postgresql-performance

7
推荐指数
2
解决办法
3265
查看次数

Bash:通过ssh启动远程python应用程序并获取其PID

我正在创建一个小的bash脚本来将新文件从windows机器复制到远程linux centos服务器(我使用git-shell运行这个脚本)然后我想重新启动运行在服务器中的python应用程序以使用那些新的文件.

问题是每次我运行这个脚本我想在我再次启动之前结束实际的运行过程,所以我想得到我启动的进程的pid并将其保存到远程主机中的文件,以便我可以读取它从那里下次我运行程序并杀死它.

我的代码现在看起来类似于:

echo "Copying code files to server..."
# The destination folder has to exist in the server
scp -r ./python/ root@myserver:/root/

echo "Checking for running processes..."

if ssh root@myserver 'ls dmr.pid >/dev/null'; then
    echo "PID file exists, reading file..."
    PID=$(ssh root@myserver 'cat dmr.pid')

    # Terminate the actual process
    echo "Terminating the process with PID '$PID'..."
    ssh root@myserver 'kill $PID'
else
    echo "PID file doesn't exist, not known processes running"
fi

# Restart the server and get the …
Run Code Online (Sandbox Code Playgroud)

linux ssh bash pid remote-access

7
推荐指数
1
解决办法
4679
查看次数

加速使用多个find命令的bash脚本

我有一个bash脚本将项目的一些文件添加到git,然后同步该分支,随着文件数量的增加,我注意到脚本变得慢得多,所以我想知道我是否正在这样做正确的方法.

这是添加文件的脚本部分:

echo "Adding files..."
find . -name '*.js' -exec git add {} \;
find . -name '*.html' -exec git add {} \;
find . -name '*.css' -exec git add {} \;
find . -name '*.py' -exec git add {} \;
find . -name '*.txt' -exec git add {} \;
find . -name '*.jpg' -exec git add {} \;
find . -name '*.sh' -exec git add {} \;

echo "Commit"
git commit -m "'$1'"
Run Code Online (Sandbox Code Playgroud)

我不确定是否只需要一次调用find就会比拥有所有这些分开的命令更快,但我这样做是因为删除某些类型的文件或添加新文件更简单.

我真的很感激任何建议,以提高效率,以不同的方式使用命令或使用不同的命令是一个完全可以接受的答案.

linux git bash performance find

4
推荐指数
1
解决办法
917
查看次数

在Windows批处理文件中的字符串变量中使用%2*

我正在尝试批量创建一个简单的脚本以在Windows中运行,该脚本有3个变量:

  1. 要打开的URL
  2. 要打开的窗口数
  3. 等待新窗口打开的时间

该脚本工作正常,除非URL包含%20或%2F等字符,其中我猜cmd.exe试图将它们用作变量,我将URL的值放在引号之间,但这没有帮助.

如果我使用地址:

set url="http://domain.com/app.html?path=%2F%2Flocalhost%2Fcode&do_pause=false&go=true"
Run Code Online (Sandbox Code Playgroud)

浏览器打开这个:

https://domain.com/app.html?path=FFlocalhostFcode&do_pause=false&go=true
Run Code Online (Sandbox Code Playgroud)

有没有办法可以设置变量或处理它的值,这样它就不会将这些符号解释为变量名?

在此先感谢,这里是代码供参考.这是我第一次尝试批量编写脚本,所以任何建议都会非常感激.

@echo off

echo "Setting variables..."
set iterations=2
set url="http://domain.com/app.html?path=%2F%2Flocalhost%2Fcode&do_pause=false&go=true"
set time=5

set browser="C:\Program Files\Google\Chrome\Application\chrome.exe"

echo "Running the browser..."
FOR /L %%i IN (1,1,%iterations%) DO (
%browser% %url%
timeout %time%
)

ECHO Browsers are running, press Enter when ready to close this window. . .
pause
Run Code Online (Sandbox Code Playgroud)

windows batch-file variable-assignment

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