小编Mat*_*een的帖子

Python中的不变性和线程安全性

我正在清理我写的一些Python代码,当时我不是那么知识渊博.主要是我正在消除由于对Python中的线程不完全理解而产生的一些复杂性.我需要创建一个线程安全的项目列表,我想通过不可变列表,而不是通常的锁定方法.我知道不可变对象在线程方面非常特殊,因为围绕不完整状态更改的所有线程安全问题都会消失.

所以,我问:以下代码是否是线程安全的?

class ImmutableList(object):
    def __init__(self):
        self._list = ()

    def __iter__(self):
        return self._list.__iter__()

    def append(self, x):
        self._list = self._list + tuple([x])
Run Code Online (Sandbox Code Playgroud)

我认为是,因为每次都会构建一个新列表.如果在另一个线程迭代它时更新列表,则旧列表将继续用于迭代的剩余部分.这对我来说很好,但可能不适合所有人.

这也是个好主意吗?我只想将其应用于列表大小较小的几种情况,并且列表不会发生太大变化(事件监听器会浮现在脑海中).

python multithreading immutability

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

RSpec:测试AR查找器而不会访问数据库

我如何使用RSpec测试以下查找程序?

def self.find_by_mbid(mbid)
  super(mbid.downcase())
end
Run Code Online (Sandbox Code Playgroud)

我认为可能的唯一方法是预先将它存储在数据库中,我想避免,因为这是一个单元测试.我不知道如何在这里返回一个模拟,因为superRSpec几乎无法访问.

有没有更好的方法呢?或者单元测试对于这类事情来说太低级了?

ruby bdd rspec

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

普通用户帐户和root之间有什么关系吗?

我正在开发一个代表用户管理网络接口的应用程序,它会调用几个需要root进行更改的外部程序(例如ifconfig).(具体来说,更改本地接口的IP地址等)在开发过程中,我一直以root(ugh)运行IDE,以root身份运行调试器(double-ugh).最终用户是否有一种很好的方式在非root帐户下运行它们?我非常不喜欢GTK,wxPython,Python和我的应用程序在以root身份运行时所呈现的攻击面的大小.

我已经研究了功能,但它们看起来很不完整,我不确定我是否能够在Python中使用它们,特别是如果它们是基于线程的.我没有探索过的唯一选择是一个守护进程,它具有setuid位设置并代表UI完成所有根类型的东西.我对在项目早期引入这种复杂性犹豫不决,因为以root身份运行并不是用户的破解者.

python linux root

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

证明 struct 字段的生命周期比另一个生命周期长

我正在 Rust 中开发一个词法分析器。

所需的 API:

enum Token<'input> {
    Name(&'input str)
}

let mut lexicon = LexiconBuilder::<Token>::new()
    .token("[a-zA-Z]+", |s| Token::Name(s))
    // among others
    .build();

let mut lexer = Lexer::new(lexicon, "input");
Run Code Online (Sandbox Code Playgroud)

这个想法是用户可以提供一个正则表达式,以及一个当正则表达式匹配输入文本时运行的闭包。但是,我无法向生命周期检查器证明传递到token()的闭包中的切片存活时间足够长。从我的 POV 来看,这似乎是安全的,因为在您提供字符串之前不会返回令牌。

Rust 游乐场链接

我花了很长时间试图通过所有类型来线程化输入生命周期,但是我似乎永远无法证明词典(因此,规则的处理程序)的生命周期将匹配/支配输入的生命周期。

rust borrow-checker

0
推荐指数
1
解决办法
75
查看次数

标签 统计

python ×2

bdd ×1

borrow-checker ×1

immutability ×1

linux ×1

multithreading ×1

root ×1

rspec ×1

ruby ×1

rust ×1