【问题标题】:Can list.append(foo) be not thread-safe?list.append(foo) 可以不是线程安全的吗?
【发布时间】:2019-05-18 21:43:54
【问题描述】:

我经常使用多线程,同时从不同线程附加到同一个列表。一切正常。

但是,当线程像 70 个或更多线程时,我遇到了添加列表的问题。在最后一个线程中追加会卡住 5 分钟(此时处理器没有被占用,可能是 10%。所以,我想说这不是硬件问题)。然后追加成功。

在这个link,它说列表附加是线程安全的。

我的问题是:列表追加是否会变得不安全?

不要索要密码。我只需要一个简单的是或否来回答我的问题。如果是,请提供解决该问题的建议。

【问题讨论】:

  • 线程安全实际上是 achieved by Python through the GIL 并且有 70 个线程,单个线程可能被锁定并且在相当长的一段时间内无法执行任何操作,因为只有一个线程会在时间。

标签: python python-3.x multithreading append


【解决方案1】:

在 python 中追加列表是线程安全的。

你最后一个线程卡住可能是由于其他原因,例如:内存分配..

我修复卡住的第一步是使用strace 来跟踪系统调用。

您也可以使用gdb 打印所有线程的调用堆栈。这是一个维基页面:https://wiki.python.org/moin/DebuggingWithGdb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2010-10-15
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多