如何强制执行不同的线程

2024-02-25

我有一个主线程执行一些 CPU 密集型操作。线程必须为其所有计算持有锁。

还有一些其他线程偶尔需要在短时间内使用相同的锁。

如果没有其他线程,如何强制主线程偶尔允许其他线程执行而不减慢速度?

周期性的

lock.release()
time.sleep(x)
lock.acquire()

对于某些 x 会将控制权传递给另一个线程,但如果没有其他线程,则会减慢主线程的速度。

另一方面,如果没有sleep()调用 GIL 似乎会干扰这里。由于主线程执行时有GILrelease(),另一个线程显然无法从acquire()立即地。因此,主线程继续执行自己的操作acquire()方法和其他线程永远不会获得锁,除非 GIL 开关恰好与我释放自己的锁同时发生。

这个问题的正确解决方案是什么?有没有办法强制释放 GIL?基本上我想要一些神奇的代码来确保在下面的测试脚本中第二个线程总是首先获得锁:

import threading
import time

class t1 (threading.Thread):
    def run(self):
    print "Second thread waiting for lock"
    lock.acquire()
    print "Second thread got lock"
    lock.release()

lock = threading.Lock()
lock.acquire()

t = t1()
t.start()
time.sleep(1)

lock.release()
time.sleep(0) # this works very often, but not all the time
lock.acquire()
print "Main thread got lock"
lock.release()

仅仅释放 GIL 并不能保证其他线程有机会运行。

在 Unix 中,你真正想要的调用是sched_yield()。 Python 标准库中没有该函数的接口;添加一个带有本机模块的模块会很简单。

usleep(0) and select()有时用于相同的目的,尽管根据系统调度程序的不同,它并不总是相同的。 Windows,您需要睡眠(0)。对这两者都使用 time.sleep(0) 。

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

如何强制执行不同的线程 的相关文章

  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • 确定Python模块中的函数是否可用

    我正在研究一些使用Python套接字的代码socket fromfd http docs python org library socket html socket fromfd功能 但是 此方法并非在所有平台上都可用 因此我正在编写一些后
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 对于 pygtk 应用程序来说,什么是好的嵌入式浏览器?

    我计划在我的 pygtk 应用程序中使用嵌入式浏览器 并且我正在 gtkmozembed 和 pywebkitgtk 之间进行辩论 两者之间有什么引人注目的区别吗 还有我不知道的第三种选择吗 应该注意的是 我不会使用它来访问网络上的内容 我
  • Python3.1中的视图?

    Python3 1中的视图到底是什么 它们的行为方式似乎与迭代器类似 并且它们也可以具体化为列表 迭代器和视图有何不同 据我所知 视图仍然附加到创建它的对象上 对原始对象的修改会影响视图 来自docs http docs python or
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • Python unittest - 与assertRaises相反?

    我想编写一个测试来确定在给定情况下不会引发异常 测试是否有异常很简单is上调 sInvalidPath AlwaysSuppliesAnInvalidPath self assertRaises PathIsNotAValidOne MyO
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • 仅对某些行的不同大小的两个 pandas 数据帧的列进行求和

    我有两个 pandas 数据框 如下所示 df1 n column1 0 5 0 0 0 1 6 0 0 0 2 7 0 0 0 3 8 0 0 0 4 9 0 0 0 5 10 0 0 0 df2 n column2 0 6 0 1 0
  • sklearn 中带有词袋和附加情感特征的文本分类器

    我正在尝试构建一个分类器 除了词袋之外 还使用情绪或主题 LDA 结果 等特征 我有一个包含文本和标签的 pandas DataFrame 并且想添加情感值 5 到 5 之间的数字 和 LDA 分析结果 带有句子主题的字符串 我有一个工作词
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha
  • 连接运算符 + 或 ,

    var1 abc var2 xyz print literal var1 var2 literalabcxyz print literal var1 var2 literal abc xyz 除了带有 的自动空格之外 两者有什么区别 哪个通
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla

随机推荐

  • 在C中提取两个特定字符串之间的字符串

    如何提取两个指定字符串之间的字符串 例如 有没有一种简单的方法可以使用它strtok 或者更简单的东西 编辑 两个指定的字符串是提取的字符串是Extract this 使用搜索第一个子字符串strstr 如果找到 则保存子字符串的数组索引
  • 取消/中止/中断 spring-android Resttemplate 请求

    我在一个专门执行 spring android 请求的线程中使用 spring android 我无法中止从 spring android 发起的请求 例如 getForObject 我尝试过了 到达底层输入流关闭但它完全包裹在spring
  • less.js 惰性工作表加载

    我想知道是否有办法加载单个less https github com cloudhead less js页面加载后的某个时间 这个问题 https stackoverflow com questions 3175013 load less
  • F# 运算符重载奇怪的行为

    假设由于某种奇怪的原因我想要这个功能 let str string 42 所以我可以做这样的事情并得到 42 结果 test val it int 42 这很好 但现在当我这样做时 let a 100 a I get error FS000
  • PHP 中的 substr_replace 编码

    我想写入一个文本文件 当我使用子字符串替换 https www php net manual en function substr replace php在 PHP 中 编码发生变化 它无法正确打印希腊字符 如果我不这样做 一切都很好 我怎
  • 如何检索 WordPress 页面的同级页面列表?

    我正在尝试在 WordPress 中创建同级页面 不是帖子 列表来填充页面的侧边栏 我成功编写的代码返回页面父级的标题 据我了解 您需要页面的 id 而不是标题 来检索页面的同级页面 通过wp 列表 页面 http codex wordpr
  • 如何防止使用 git hook 提交文件 (.json)?

    如何防止使用 git hook 提交文件 json 我有一个 json 文件仍在服务器上 所以我不能使用 gitignore 但现在我不想允许任何人更改此文件 提交它 因为它会破坏某些内容 我想使用本地钩子 我怎样才能获得提交中的特殊文件
  • 从今天开始在 Groovy 中计算年龄

    试图根据某人的生日来推测他的年龄 以下代码给出了天数 def now new Date def dob new Date 08 21 1982 println now dob 我们可以除以 365 但这并不完全准确 必须有一种简单的方法来做
  • SQL Server 中函数的返回值

    我想得到从今天开始的最后一个星期六 21 天 为了实现这一目标 我编写了如下所示的脚本 但问题是我无法成功从结果中返回值 我想在 SQL Server 中创建这个函数 并在我想要的存储过程中获取这个值 DECLARE StartDate D
  • C/C++/C# 强制窗口位于顶部

    有没有办法强制another窗口位于顶部 Not应用程序的窗口 但是another一 已经在系统上运行 Windows C C C SetWindowPos that window handle HWND TOPMOST 0 0 0 0 S
  • 为什么 HttpUtility 类无法被识别?

    我正在尝试调用静态HttpUtility UrlEncode在我的 VB NET 项目中 但 IDE 无法识别该类 并表示该类尚未声明 我已经导入了命名空间System Net and System Web到项目 我还在文件顶部添加了以下内
  • 一对一关系的数据库设计

    我正在尝试完成项目数据模型的设计 但很难弄清楚该采用哪种方式 我有一个用户表 以及适用于该用户的未确定数量的属性 这些属性几乎在每种情况下都是可选的 因此允许空值 这些属性中的每一个对于用户来说都是一对一的 我应该将它们放在同一个表上 并在
  • 如果变量在线程之间共享,将变量标记为易失性是否有用? [复制]

    这个问题在这里已经有答案了 Notice 显然我没能向这里的每个人清楚地表达我的观点 这令人难以置信的沮丧 我的目标是消除这样的神话volatile实际上是一个空操作 它什么也不做 我并不是想声明它应该被使用 它是必要的 它不是多余的等等
  • 检测设备品牌

    我正在从事网络分析工作 我正在使用 JavaScript 客户端和 NodeJS 服务器端 我知道我们可以找到答案设备类型 https stackoverflow com questions 11381673 javascript solu
  • Komodo Edit 禁用自动完成

    我正在使用 Komodo Edit 8 它的自动完成功能非常烦人 当我打字时 for i 它会自动填充 for i in range code 现在我必须手动删除它才能继续输入 我尝试关闭 启用自动自动完成和键入时触发的调用提示 from
  • 在现有播放器上启用 YouTube API

    我有一个嵌入式 YouTube 视频 我希望应用 YouTube API 我使用 jQuery 添加 url 参数 如下所示 demo http jsfiddle net VVEY9 document ready function var
  • java字符串日期转换

    我想在存储字符串之前将其转换为日期 并且我使用了 SimpleDateFormat format new SimpleDateFormat yyyy mm dd Date returnDate format parse date 当我使用样
  • 在 MS SQL Server 2008 中创建序列

    我编写了一个程序 可以在其中请求身份证 有不同类型的身份证 红 蓝 绿 当提出请求时 程序应该生成标识号 数字 数字范围 取决于所请求的卡 Red Card 1 50000 Blue Card 50001 100000 Green Card
  • 为什么 VS Code 在 java 文件中显示 System.out.println() 的这些标签或参数名称?

    我已经安装了java扩展包 这件事从今天才开始发生 不确定这是由于某些 json 设置还是其他原因造成的 See 诸如 s x 和 参数名称之类的随机内容出现在我的打印语句中 https github com redhat develope
  • 如何强制执行不同的线程

    我有一个主线程执行一些 CPU 密集型操作 线程必须为其所有计算持有锁 还有一些其他线程偶尔需要在短时间内使用相同的锁 如果没有其他线程 如何强制主线程偶尔允许其他线程执行而不减慢速度 周期性的 lock release time slee