小编jfs*_*jfs的帖子

如何以微秒精度计算操作时间

我想在Windows平台上以微秒精度计算函数的性能.

现在Windows本身具有毫秒级的粒度,所以我怎样才能做到这一点.

我尝试了以下示例,但没有得到正确的结果.

LARGE_INTEGER ticksPerSecond = {0};
LARGE_INTEGER tick_1 = {0};
LARGE_INTEGER tick_2 = {0};
double uSec = 1000000;

// Get the frequency
QueryPerformanceFrequency(&ticksPerSecond);

//Calculate per uSec freq
double uFreq = ticksPerSecond.QuadPart/uSec;

// Get counter b4 start of op
QueryPerformanceCounter(&tick_1);

// The ope itself
Sleep(10);

// Get counter after opfinished
QueryPerformanceCounter(&tick_2);

// And now the op time in uSec
double diff = (tick_2.QuadPart/uFreq) - (tick_1.QuadPart/uFreq);
Run Code Online (Sandbox Code Playgroud)

c c++ windows precision performance

6
推荐指数
2
解决办法
1293
查看次数

Python导入被标准库覆盖(Python 2.4)

我有一个python包我正在编写,我遇到的问题是导入标准库而不是我的文件,因为名称冲突.

例如,如下所示的文件结构:

package/__init__.py

# No data in this file
Run Code Online (Sandbox Code Playgroud)

包/ module.py

#!/usr/bin/env python
print 'Loading module.py'
import signal
Run Code Online (Sandbox Code Playgroud)

包/ signal.py

#!/usr/bin/env python
print 'Loading signal.py'
Run Code Online (Sandbox Code Playgroud)

运行时我得到以下结果:

$ ./module.py
Loading module.py
Run Code Online (Sandbox Code Playgroud)

我想得到:

$ ./module.py
Loading module.py
Loading signal.py
Run Code Online (Sandbox Code Playgroud)

实际问题:

所以,当我运行module.py时,它import signal会转到stdlib版本.我怎样才能强制module.py导入signal.py呢?

如标签中所述,这需要能够在python-2.4.3上运行.虽然这是旧版本,但它包含在RHEL 5中.


一些额外的信息

只是为了获得更多信息,我明确地进行了以下设置:

[10:30pm][~/test] tree .
.
|-- package
|   |-- __init__.py
|   |-- module.py
|   `-- signal.py
`-- script

[10:30pm][~/test] cat script
#!/usr/bin/env python
from package import signal

[10:30pm][~/test] cat package/__init__.py

[10:30pm][~/test] …
Run Code Online (Sandbox Code Playgroud)

python python-2.4

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

subprocess.popen的poll方法为long进程返回None

我正在通过子进程执行curl命令.此curl命令在另一台服务器上启动视频处理,并等待响应.完成此过程后,远程服务器将返回json对象.我正在使用poll()值检查子进程的状态,该值为None - 进程未完成,0进程成功完成,1-表示错误.

如果处理在远程服务器上花费大约30分钟或更少,我得到正确的响应,但如果处理花费更多时间,我只得到无值,即使我可以看到远程服务器已经完成处理并且已经返回了json对象.

任何人都可以告诉我,poll()可能的原因可能是在一定时间后才返回None.先感谢您.

我的Popen对象是:

object = subprocess.Popen(str(curlCmd), shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

object.poll()每隔2秒就打电话一次,检查过程是否成功完成.

python subprocess popen

6
推荐指数
3
解决办法
7485
查看次数

使用Python打开shell环境,运行命令并退出环境

我正在尝试使用python自动化进程.如果我只是在终端,工作流程如下:

user:> . /path/to/env1.sh
user:> python something.py
user:> exit
user:> . /path/to/env2.sh
user:> python something2.py
user:> exit 
Run Code Online (Sandbox Code Playgroud)

等几步.每个都会env.sh生成一个新脚本,其中包含大量环境变量以及当前目录中未设置的内容.我很确定我需要使用子进程,但我不确定如何去做.理想情况下,工作流程将是:打开新shell - >运行一些命令 - >退出shell - >根据需要重复.

编辑:似乎需要一些澄清.我理解如何使用subprocess.Popen()subprocess.call()从调用Python脚本的shell中调用东西.这不是我需要的.当一个人调用env.sh它时,它会设置大量的环境变量和一些其他相关的东西,然后将你放入一个shell来运行命令.重要的是要注意在运行所需命令后env.sh直到一种类型exit才会终止.使用subprocess.call("./env.sh", shell = True)打开shell并停在那里.这就像输入命令一样,./env.sh除了发出exit命令时,其余的python脚本.所以:

subprocess.call(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
Run Code Online (Sandbox Code Playgroud)

不做我需要做的事情,也不做:

p = subprocess.Popen(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
p.kill()
Run Code Online (Sandbox Code Playgroud)

python bash shell subprocess

6
推荐指数
3
解决办法
2万
查看次数

计算字符串中不同的5个字符子串的数量

给定一个字符串我想计算len = 5的子串数.

例如:输入:"ABCDEFG"输出:3

我不确定在python中最简单快捷的方法是什么.任何的想法?

更新:

我只想计算不同的子串.

输入:"AAAAAA"子串:2次"AAAAA"输出:1

python algorithm

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

"可表示"在C11中意味着什么?

根据C11 WG14草案版本N1570:

标头<ctype.h>声明了几个用于分类和映射字符的函数.在所有情况下,参数都是a int,其值应表示为unsigned char或等于宏的值EOF.如果参数具有任何其他值,则行为未定义.

是不确定的行为?:

#include <ctype.h>
#include <limits.h>
#include <stdlib.h>

int main(void) {
  char c = CHAR_MIN; /* let assume that char is signed and CHAR_MIN < 0 */
  return isspace(c) ? EXIT_FAILURE : EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

标准是否允许传递charisspace()(charint)?换句话说,char转换后可以int 表示unsigned char


以下是wiktionary定义"可表示"的方式:

能够代表.

char能够被表示为unsigned char是的.§6.2.6.1/ 4:

存储在任何其他对象类型的非位字段对象中的值由n × CHAR_BIT …

c language-lawyer c11

6
推荐指数
2
解决办法
485
查看次数

为什么我的Eratosthenes筛子这么慢?

我在Project Euler上解决了一些问题,并且必须生成200万个素数以解决问题.我对Eratosthenes筛子的实施结果非常缓慢,但我不知道为什么.有人可以解释一下这个实现的主要问题.我觉得它太漂亮了,然后我发现它非常可怕:(.我在网上发现了它的另一个实现,它比我的快得多.

def generatePrimes(upperBound):
    numbers = range(2,upperBound+1)
    primes = []

    while numbers:
        prime = numbers[0]
        primes.append(prime)
        numbers = filter((lambda x: x%prime),numbers)
    return primes
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢你的所有答案!这样做的结论是过滤器是问题所在,因为它遍历每个元素(而不仅仅是那些被标记为非素数的元素),因为它每次都会创建一个新列表.用旧的for循环和一轮过滤重写它,它的工作速度更快.新代码:

def generatePrimes(upperBound):
numbers = range(2,upperBound+1)

for i in xrange(len(numbers)):
    if(numbers[i] != 0):
        for j in xrange(i+numbers[i],len(numbers),numbers[i]):
            numbers[j] = 0

primes = filter(lambda x: x,numbers)
return primes
Run Code Online (Sandbox Code Playgroud)

python algorithm performance primes time-complexity

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

更好的方法来检查列表中的所有列表是否都是相同的长度?

目前正在运行:

l1 = [i for i in range(0,10)]
l2 = [i for i in range(0,10)]
l3 = [i for i in range(0,10)]
lists = [l1, l2, l3]
length = len(lists[0])
for l in lists:
    if length != len(l):
        raise ValueErrorr('not all lists have same length!')
Run Code Online (Sandbox Code Playgroud)

有没有比for循环测试更漂亮的方法?是否有更快/更好的方式O(n)

python algorithm python-3.x

6
推荐指数
3
解决办法
3630
查看次数

查找一个数组中哪些元素与另一个元素中的任何元素接近的最有效方法是什么?

我有两个1维numpy.ndarray对象,并想知道第一个数组中的哪些元素在第二个数组中dx任何元素内.

我现在拥有的是什么

# setup
numpy.random.seed(1)
a = numpy.random.random(1000)  # create one array
numpy.random.seed(2)
b = numpy.random.random(1000)  # create second array
dx = 1e-4  # close-ness parameter

# function I want to optimise
def find_all_close(a, b):
    # compare one number to all elements of b
    def _is_coincident(t):
        return (numpy.abs(b - t) <= dx).any()
    # vectorize and loop over a
    is_coincident = numpy.vectorize(_is_coincident)
    return is_coincident(a).nonzero()[0]
Run Code Online (Sandbox Code Playgroud)

返回timeit结果如下

10 loops, best of 3: 16.5 msec per …
Run Code Online (Sandbox Code Playgroud)

python arrays algorithm numpy

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

使用python smtplib发送邮件错误

我正在尝试使用 python 3.2 SMTPlib.sendmail() 函数发送消息,在对 SMTP 库进行一些修改后(即注释掉抑制错误消息的 rset() 函数)我设法检索到以下错误消息从服务器:

SendMail 失败(554,b'交易失败:由于可能的滥用而无法发送邮件;请访问http://postmaster.yahoo.com/abuse_smtp.html了解更多信息')

雅虎邮件 SMTP 服务器认为我在发送垃圾邮件,该 URL 确实链接到任何有用的东西。我认为这与标题不足有关,我似乎无法找到关于什么构成合规标题的明确答案,而且我已经阅读了 Gmail 的类似问题。此帖子已替换为模拟电子邮件。

任何帮助,将不胜感激

我的完整代码如下:

    self.message =  email.message_from_string('''To: <ksmith@yahoo.co.nz>
    From: <rwilson@yahoo.co.nz>
    Reply-To: <rwilson@yahoo.co.nz>
    Subject: Test send mail \n\n Hello''')
    fromAddress = 'rwilson@yahoo.co.nz'
    toAddress = 'ksmith@yahoo.co.nz'
    try:
        self.smtp = SMTP()
        self.smtp.connect('smtp.mail.yahoo.com')
    except Exception:
        print('Connection Failed')
        print(traceback.format_exc())
    try:
        self.smtp.login('rwilson','tree22')
    except Exception:
        print('Login Failed!')
        print(traceback.format_exc())
    try:
        self.smtp.sendmail(fromAddress,toAddress ,self.message.as_string())
        print("Message sucessfully sent!")
        self.smtp.close()
    except Exception as e:
        print('SendMail Failed')
        print(e)
Run Code Online (Sandbox Code Playgroud)

python email smtp yahoo-mail python-3.2

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