在后台启动Python进程时,用
nohup python myscript.py > test.log 2>&1 < /dev/null &
Run Code Online (Sandbox Code Playgroud)
问题是stdout缓冲:数据不是实时写入的test.log.以常见的解决办法这个问题是定时冲洗用sys.stdout.flush(),甚至更好,因为提出这个答案,使用python -u:
nohup python -u myscript.py > test.log 2>&1 < /dev/null &
Run Code Online (Sandbox Code Playgroud)
但这还不够.我注意到它在几个小时内工作,然后,它停止工作,即几个小时后test.log不再实时写入,即使我使用过nohup python -u ....
1)这是如何重现问题(我有一个标准的Debian Jessie).启动此文件:
import time
import datetime
while True:
print datetime.datetime.now()
time.sleep(60)
Run Code Online (Sandbox Code Playgroud)
与nohup python -u myscript.py > test.log 2>&1 < /dev/null &.日志文件将在几个小时内更新,然后在3或4小时后更新,不再有任何内容.
2)如何解决这个问题,而不必stdout.flush()在代码中插入每两行(丑陋的解决方案)?
我想计算连续数据行的时间戳之间的差异.
为什么这项工作,为解释在这里:
df['tvalue'] = df.index
print df['tvalue'].shift() - df['tvalue']
Run Code Online (Sandbox Code Playgroud)
但不是
print df.index.shift() - df.index
Run Code Online (Sandbox Code Playgroud)
哪个产生ValueError: Cannot shift with no freq?
问题是工作解决方案使时间戳所需的内存大小加倍; 这对于庞大的数据帧来说是个问题.
使用Sqlite,我想将一个自动递增ID列添加到以前没有ID的现有表中:
import sqlite3
db = sqlite3.connect(':memory:')
c = db.cursor()
c.execute('create table events (int weight, text str)')
c.execute('insert into events values(?, ?)', (1371, 'Test1'))
c.execute('insert into events values(?, ?)', (223, 'Test2'))
c.execute('select * from events'); print c.fetchall()
# [(1371, u'Test1'), (223, u'Test2')]
# add an autoincrementing ID to existing table
c.execute('alter table events add id int not null auto_increment primary key')
Run Code Online (Sandbox Code Playgroud)
怎么做得好?我有这个错误:
sqlite3.OperationalError:"auto_increment"附近:语法错误
如果有可用空间,我想添加 40px 的左边距。如果父宽度不够,我们就减小它。
示例:如果父级只有 420 像素宽,则边距应减少到 20 像素。
这个怎么做?
* {margin: 0; padding: 0;}
#parent {resize: both; border: 2px solid; overflow:auto; width: 500px; }
#margin { display: inline-block; background-color: blue; width: 40px; }
#main { display: inline-block; background-color: red; width: 400px; }Run Code Online (Sandbox Code Playgroud)
<div id="parent">
<div id="margin"> </div>
<div id="main"> </div>
</div>Run Code Online (Sandbox Code Playgroud)
x是一个numpy.float32数组,使用来自值-200到0.这些是dB(分贝)值.
当我这样做时(按照此处的建议):
Image.fromarray(x, mode='F')
Run Code Online (Sandbox Code Playgroud)
我得到一个灰度或有时几乎是黑色的图像.
如何将[-200,0]中的float映射到24位RGB字节数组(使用色彩映射),可以使用Python模块PIL读取Image.fromarray(x, mode='RGB')?
这是一些要测试的代码:
import scipy, numpy as np
import scipy.io.wavfile as wavfile
import numpy as np
from PIL import Image
def stft(x, fftsize=1024, overlap=4):
hop = fftsize / overlap
w = scipy.hanning(fftsize+1)[:-1]
return np.array([np.fft.rfft(w*x[i:i+fftsize]) for i in range(0, len(x)-fftsize, hop)])
def dB(ratio):
return 20 * np.log10(ratio+1e-10)
def magnitudedB(frame, fftsize=1024):
w = scipy.hanning(fftsize+1)[:-1]
ref = np.sum(w) / 2
return …Run Code Online (Sandbox Code Playgroud) 背景:某些Windows命令行程序允许*.*在第一个参数中使用:
myprogram *.*
Run Code Online (Sandbox Code Playgroud)
并将自动循环目录的所有文件.
其他一些则没有,因此需要批处理循环:
for %%c in ("*.*") do myprogram "%%c"
Run Code Online (Sandbox Code Playgroud)
问题:是否有标准方式(在C语言中定义或OS提供?)允许*.*或*.txt在参数中,以便它自动对相关文件进行处理?
int main(int argc, char *argv[])
{
FILE *kf;
"for fname in argv[1]" // pseudo code here meaning:
// let's loop on all files described by the first argument
{
kf = fopen(fname, "rb");
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查一个解决方案是否存在,然后滚动我自己(重新发明通配符扩展的轮子,使用FindFirstFile等)
我想在进行计算时显示一些图像numpy:
import numpy as np
import matplotlib.pyplot as plt
plt.ion() # Turn the interactive mode on.
for i in range(100):
A = np.random.randn(10,10)
plt.imshow(A)
plt.pause(0.001)
# do some other numpy computations here (they take < 1 ms)
Run Code Online (Sandbox Code Playgroud)
显示图像不是很快,而是相当慢。
我并不是要求每秒 100 帧,但我认为 30 fps 是可能的,但事实并非如此:经过几次迭代后,我在标准 i5 笔记本电脑(Windows 7 x64)上接近 2 fps。
如何拥有更快的imshow刷新率?
笔记:
我已经尝试过Fast Live Plotting in Matplotlib / PyPlot的主要答案,但对于blit这样一个简单的任务来说,这似乎是一个复杂的方法(使用参数),而且我也没有得到 28 fps 而只有 15 fps。
我只想将矩阵显示为图像:没有边框,没有轴,没有子图等,我想这可以比解决方案Fast Live Plotting …
我知道如何读取文件,将这些字节传递给哈希算法(例如 MD5SUM、SHA256 或 CRC32),并获取哈希值。
在这里我问的问题略有不同:
每次我们在 NTFS 分区上写入/修改文件时,它是否会重新计算哈希或 CRC32 并将此信息存储在 NTFS 元数据/FAT/MFT(主文件表)中(我不记得确切的名称)?
注意:重要的是我只想读取存储在文件系统中的存储哈希/CRC(即读取几个字节,最多应该是几毫秒),而不是重新计算哈希(这将花费很多秒来计算 10 GB 文件)。
如果是这样,如何使用 Python 访问特定文件的 CRC 或哈希值?有没有类似的东西:
import ntfsutil
ntfsutil.getCRC('d:/big50GBfile.dat') # done in < 10 ms
Run Code Online (Sandbox Code Playgroud) 我正在rsync用 Python 编写一个类似玩具的工具。与许多类似的工具一样,它首先使用非常快的哈希作为滚动哈希,然后在找到匹配项后使用 SHA256(但后者不在此处的主题:SHA256、MDA5 等作为滚动哈希太慢)哈希)。
我目前正在测试各种快速哈希方法:
import os, random, time
block_size = 1024 # 1 KB blocks
total_size = 10*1024*1024 # 10 MB random bytes
s = os.urandom(total_size)
t0 = time.time()
for i in range(len(s)-block_size):
h = hash(s[i:i+block_size])
print('rolling hashes computed in %.1f sec (%.1f MB/s)' % (time.time()-t0, total_size/1024/1024/(time.time()-t0)))
Run Code Online (Sandbox Code Playgroud)
我得到:0.8 MB/s ...所以Python内置hash(...)函数在这里太慢了。
哪种解决方案可以在标准机器上实现至少 10 MB/s 的更快哈希值?
我尝试过
import zlib
...
h = zlib.adler32(s[i:i+block_size])
Run Code Online (Sandbox Code Playgroud)
但也好不了多少(1.1 MB/s)
我尝试过sum(s[i:i+block_size]) % modulo,它也很慢
有趣的事实:即使没有任何哈希函数,循环本身也很慢!
t0 = …Run Code Online (Sandbox Code Playgroud)当找到一个有趣的 Python Jupyter Notebook 时,例如02.00-Introduction-to-NumPy.ipynb,我通常必须:
jupyter notebook难道没有更简单的方法吗?
打开在线 .ipynb 笔记本并运行代码而无需手动下载 .ipynb 的自然方法是什么?
注意:笔记本在这里可见: https: //github.com/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/02.00-Introduction-to-NumPy.ipynb,但我们无法运行代码