在这个例子中我需要使用线程锁吗?

2024-04-21

我将值附加到一个线程中的嵌套列表,然后在主线程中使用列表理解复制不断增长的嵌套列表。我的示例中需要使用线程锁吗?我知道list.append() method 是线程安全的 http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm,但是在使用列表理解复制数据时是否需要使用锁?

如果我确实需要使用锁,那么使用锁是否有意义?copy_data()但不在GrowList._add_to_list()?

import threading
import time

class GrowList(object):
    def __init__(self):
        self.data = []
        self.stop_event = threading.Event()
        self.add_to_list()

    def _add_to_list(self):
        sample = [1, 2, 3, 4]
        while not self.stop_event.is_set():
            self.data.append(sample)
            time.sleep(1.0)

    def add_to_list(self):
        self.t = threading.Thread(target=self._add_to_list)
        self.t.start()

    def stop(self):
        self.stop_event.set()
        self.t.join()


def copy_data(nested_list):
    return [row[:] for row in nested_list]

I think您至少需要一把锁才能在一个线程中进行迭代 同时附加在另一个中,并且我think它不会使 当你不使用时复制数据时使用锁是有意义的 追加到列表时的锁。使用锁的要点 是要求列表上的一些所有权。

您可能会问的另一个问题是,这样做的意义何在?not使用锁?您可以通过简单地保持代码整洁 替换self.data = [] by self.data = MySafeList()和 通过单独编写一个带锁的小型线程安全列表类。 通过使用众多的之一可以很容易地编写它@synchronized装饰器随处可用。例如 这__iter__允许列表理解的方法可以是 写成

@synchronized
def __iter__(self):
    return iter(list(list.__iter__(self)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在这个例子中我需要使用线程锁吗? 的相关文章

  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • Delphi XE2:为什么 FireMonkey 应用程序是高清的?

    根据 Delphi XE2 的发行说明 FireMonkey可以创建高清应用程序 HD 代表高清晰度 为什么是高清 VCL应用程序不能像FireMonkey一样创建高清应用程序吗 这里是Firemonkey 的文档 http docwiki
  • 来自 post 请求的有效负载在 Node.js 函数中不可用

    我刚刚开始摆弄三个新的 对我来说 框架 产品 MongoDB NodeJS 和 AngularJS 我想要完成的是让一个简单的表单提交一个值并将该值写入数据库 我已经到了这样的地步 在我的 Angular 应用程序中使用 http post
  • jQuery 中的对象或方法链接如何工作?

    我不是问链接的适当语法是什么 我知道它可能是这样的 myDiv removeClass off addClass on 据我所知 链接是相对于其他著名框架的优势之一 有人可以向我解释一下链接在这里是如何工作的吗 如果您有一个具有某些方法的对
  • 参数“sectionGroupName”无效

    我正在尝试添加服务引用 然后收到此错误 参数 sectionGroupName 无效 参数名称 sectionGrouName 项目运行 Net 3 5 当我将项目升级到 Net 4 0 时 它就可以工作了 但这对我来说不是一个选择 因为其
  • 为什么按钮不绘制?

    我不明白为什么按钮不绘制在它之前工作的背景上 这不会显示错误 这是代码 gt 这段代码是错误的吗 我的问题是否可以重现 它可能在按钮的代码中 我将不胜感激 import pygame pygame init screen pygame di
  • Kafka服务器未远程连接zookeeper服务器

    我正在尝试将 kafka 服务器 在 Windows 系统上 连接到 Zookeeper 服务器 我面临着 Opening socket connection to server 10 160 10 25 10 160 10 25 2181
  • Postmates 与 Shopify Shipping/Carrier 服务集成

    我们正在寻求集成此应用程序 https postmates com developer docs https postmates com developer docs进入我们的 Shopify 平台 有关其工作原理 请检查 http blo
  • 如何替换ng-view中的部分节?

    我倾向于 Angular 的路线 很清楚如何通过简单的设置将视图加载到 ng view 中template属性 假设我在视图上有一个小部件 当用户导航到 changeWidget 时 如何仅替换小部件内容 在我看来 我只能使用单个ng vi
  • android:errorMessageBackground 在 styles.xml 中找不到资源错误

    我正在研究EditText验证并使用 setError 显示错误消息 我的主要座右铭是根据我的应用程序设计更改错误弹出窗口 我用的是 android errorMessageBackground 风格但不幸的是我得到了 No Resourc
  • 将非标准 svn 转换为 git

    我们有一个非标准的 svn 设置 如下所示 Root gt Trunk gt Projects gt Project 1 gt Project 2 gt Project 3 gt Libraries gt Library 1 gt Libr
  • 使用 ggplot 包 R 更改图中 yaxis 面的标签

    这是我的数据集和生成绘图的代码 library reshape library ggplot2 set seed 357 myLetters lt function length out a lt rep letters length ou
  • 使用 Google Sign-In Android 获取用户的出生日期和性别

    我已经集成了Google Sign In在我的应用程序中 我可以获得用户的Email and DisplayName 现在 我想获取用户的Birthdate and Gender 我已经添加了所有必需的requests Scopes int
  • 对象和 console.log 的奇怪行为[重复]

    这个问题在这里已经有答案了 这段代码 foo id 1 id 2 id 3 id 4 id 5 console log foo1 foo foo length foo splice 2 1 console log foo2 foo foo
  • 创建的线程数超出预期

    你可以找到该程序here https pastebin com H5fq732a 我正在消息传递框架 0MQ 中构建一个程序 我尝试执行我发布的内容here https stackoverflow com questions 4409620
  • 从因子创建列并进行计数[重复]

    这个问题在这里已经有答案了 一个看似简单的问题却让我非常忙碌 我有一个数据框 gt df1 Name Score 1 Ben 1 2 Ben 2 3 John 1 4 John 2 5 John 3 我想创建这样的表格摘要 gt df2 N
  • unserialize() [function.unserialize]:在 49151 字节的偏移量 49151 处出错

    在将对象存储到数据库中并检索它之后 我遇到了像网站上的许多错误一样的偏移错误 如果我不存储它 一切都会正常 serializedObject serialize this unSerializedObject unserialize ser
  • 如何在 PHP 中压缩/解压缩长查询字符串?

    I doubt if this is encryption but I can t find a better phrase I need to pass a long query string like this http test co
  • 如何在登录时将用户名与加密密码相匹配(java)

    我已将用户名和加密密码存储在 oracle DB 中 我将如何将用户名与 登录时加密密码 例如 用户名 abcd 加密密码 a11jsuy 实际密码 abcd 当用户当时想要登录时 他将使用用户名 abcd 和密码 abcd 但数据库存储加
  • 将输入值应用于其所有 td insidehtml

    当所有 td 内部有输入时 是否可以更改所有 td 的 innerhtml 我的意思是获取输入的值并将其应用到它的 td innerhtml 例如 这里是表及其内部输入 table tr td td tr table
  • 在这个例子中我需要使用线程锁吗?

    我将值附加到一个线程中的嵌套列表 然后在主线程中使用列表理解复制不断增长的嵌套列表 我的示例中需要使用线程锁吗 我知道list append method 是线程安全的 http effbot org pyfaq what kinds of