小编Mar*_*tin的帖子

Rust 循环性能与 python 相同

我正在研究 mandelbrot 算法来学习 Rust,我发现空的 25mil(大约 6k 图像)循环需要 0.5 秒。我发现它很慢。于是我去用python测试了一下,发现几乎花费了同样的时间。python的for循环真的是几乎零成本的抽象吗?这真的是我能用英特尔 i7 得到的最好的结果吗?

锈:

use std::time::Instant;
fn main() {
    let before = Instant::now();

    for i in 0..5000 {
        for j in 0..5000 {}
    }
    println!("Elapsed time: {:.2?}", before.elapsed());
}

>>> Elapsed time: 406.90ms
Run Code Online (Sandbox Code Playgroud)

Python:

import time

s = time.time()

for i in range(5000):
    for j in range(5000):
        pass

print(time.time()-s)
>>> 0.5715351104736328
Run Code Online (Sandbox Code Playgroud)

更新:如果我使用初始化的元组而不是范围,python 甚至比 rust 更快 -> 0.33s

python performance for-loop rust

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

Python 3 - 需要从exec()返回值

我有一个小问题exec().我有来自Kivy GUI的字符串,我需要执行并存储执行代码中的值.

class gui(BoxLayout):
    def proces(self):
        t = threading.Thread(target=self.graf)
        t.daemon = True
        t.start()

    def graph(self):

        CodeInput=self.ids.codas
        Code=CodeInput.text
        x, y = [], []
        exec(Code)
        print(x,y) # empty list prints
        # then x y will serve for plotting a graph
Run Code Online (Sandbox Code Playgroud)

这是'Code'中的一个字符串:

def values():
    x=np.linspace(0,3.14,100)
    y=np.sin(x)
    print(x) # of course works
    return x,y
x,y=values()
Run Code Online (Sandbox Code Playgroud)

一切都工作,除了我不能从exec(代码)获取值x,y.它像exec()是完全独立的操作,可以启动但无法输入.

python return exec

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

Kivy - MotionEvent: on_mouse_pos

kivy 是否支持在 mouse_pos 更改时触发的 MouseEvent 无需按下鼠标按钮?

我在文档中发现:

def on_motion(self, etype, motionevent):
    # will receive all motion events.
    pass

Window.bind(on_motion=on_motion)
Run Code Online (Sandbox Code Playgroud)

您还可以通过观察 mouse_pos 来监听鼠标位置的变化。

但是我无法实现它。我设法绑定它并添加到 on_motion 函数 'print('Hello world')' 但它仅由按下类型事件触发。

提前致谢

python mouse events kivy

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

python 程序作为 systemd 运行比从终端运行慢

我有raspberri pi 零 WH,它只有1 个 Core

我有一个循环运行的程序,侦听传入的 UDP 数据包并处理它们。对我来说至关重要的是,数据包和进一步的逻辑在 0.025 秒内处理(更清楚地说,存在永恒循环(即使没有数据包到来),无论发生什么,循环都不能超过 0.025 秒)。

如果我从终端运行我的程序,我会相当成功

sudo python3 script.py
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用systemd作为服务运行它,则该程序似乎没有占用足够的资源。循环未达到 0.025 秒条件。另外,从 htop 看来,将我的程序作为服务运行可以减少一个线程(我不能保证这一事实,只是快速观察)。

我没有使用systemd 服务的经验,所以问题可能出在我的配置上

[Unit]
Description=App

[Service]
ExecStart=sudo /usr/bin/python3 /home/pi/script.py
WorkingDirectory=/home/pi/
Restart=always
User=pi

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个标准行为或 systemd 服务的行为应该与从终端运行的程序相同吗?

python performance process raspberry-pi systemd

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

标签 统计

python ×4

performance ×2

events ×1

exec ×1

for-loop ×1

kivy ×1

mouse ×1

process ×1

raspberry-pi ×1

return ×1

rust ×1

systemd ×1