multithreading 相关问题

多线程是计算机或程序通过利用多个并发执行流(通常称为线程)同时或异步执行工作的能力。

线程在线程池执行时抛出异常会发生什么?

线程在线程池执行时抛出异常会发生什么? 它会终止并被垃圾收集吗? 背景故事: 我正在使用 ScheduledThreadPoolExecutor 来运行任务...

回答 2 投票 0

QtConcurrent 的排队异步操作会干扰 QImage 的释放

我正在使用 Qt6.5.3 编写一个图像处理应用程序。有一个生产者(相机)不断抓取图像,还有一个消费者对抓取的图像进行检测。由于检测可能相当缓慢...

回答 1 投票 0

在线程中拥有具有Queue优点的双端队列

我需要一个结构,我可以在右侧弹出()和追加()(就像双端队列一样),同时让结构在空时阻塞并等待(就像队列一样)。我可以直接...

回答 3 投票 0

保证原子性的单比特操作

有没有办法在 C++ 中将单个位设置、清除、测试和翻转作为原子操作?例如“compare_and_swap”的按位变体。

回答 3 投票 0

如何在多线程中运行`selenium-chromedriver`

我正在使用 selenium 和 chrome-driver 从某些页面抓取数据,然后使用该信息运行一些其他任务(例如,在某些页面上键入一些注释) 我的程序有一个按钮。

回答 2 投票 0

Python Qt5 同时运行两个方法

我有一个 Qt 计时器,我想在录制时倒计时(使用声音设备包),我将附上下面的内容(我知道它与任何正确的东西相去甚远)。我一直在阅读

回答 1 投票 0

如何在 C++ 中创建包含线程对象的特定类的向量?

我用c++创建了一个名为AnalyzerCore的类,如下所示: 分析器核心.h 类AnalyzerCore { 私人的: 线程分析器Thread; 无效AnalyzerFunc(); bool 正在运行; 整数ID; 公共...

回答 1 投票 0

`C++并发在Action`第4章疑惑

我目前正在阅读《C++ Concurrency in Action》第二版,第 111 页(第 4 章)。这是一个有点长的问题。 因此,作者展示了如何编写一个良好的并发版本的函数,

回答 1 投票 0

C:抢占式调度中从低优先级线程读取共享变量

单核嵌入式系统 基于优先级的调度 线程 2(T2) - 高优先级 线程 1(T1) - 低优先级 单一生产者(T2)和单一消费者(T1) 要求: 数据从T2流向T1 thr...

回答 1 投票 0

Python - 带参数的线程调用脚本

我有一个Python脚本script01.py,它有4个参数 我在批处理命令中启动 script01.py,如下所示: python script01.py arg1 arg2 arg3 arg4 现在我想并行启动 script01.py

回答 1 投票 0

如何消除服务器端的 JSON 加载错误?

我正在尝试通过以太网连接从客户端计算机向服务器计算机发送字典。 字典看起来像这样: data_transfer_dict={'目标':'', '任务':'', '光学/红外':'', 'A...

回答 1 投票 0

对协程和线程中的挂起函数感到困惑

在Android中,我通常会看到一些这样的挂起函数的代码片段: viewModelScope.launch { //由Person1实现 A() } //由Person2实现 暂停乐趣 A() { 乙() } //简单...

回答 1 投票 0

tokio::select!() 的非异步等价物是什么?

我有一些由同事编写的异步代码,我希望使用常规线程以非异步方式重写。这段代码在几个地方使用了 tokio::select!() ,我不确定如何转换它......

回答 1 投票 0

为什么我的 PyQt5 和 Vispy 应用程序仅在 QThread 循环中添加睡眠时更新 GUI?

基本上我正在尝试使用 Vispy 库实现一个用于实时数据可视化的 PyQt5 应用程序。在下面的代码中,我尝试绘制每秒 10000 个样本的正弦波......

回答 1 投票 0

如何从Python线程退出整个应用程序?

如何从其中一个线程退出整个 Python 应用程序? sys.exit() 仅终止调用它的线程,因此没有帮助。 我不想使用 os.kill() 解决方案,因为

回答 7 投票 0

STA 线程异常传播

我有一个必须作为 STA 运行的函数,并且我想将其异常传播到调用线程。这里是: 公共无效ExceptionBePropagatedThroughHere() { 线程线程 = 新线程(

回答 4 投票 0

关于Java中RejectedExecutionException的初学者问题

最近开始学习基于Java的并发,我在windows(jdk 11)上运行以下代码 导入 java.util.*; 导入 java.util.concurrent.*; 类 TaskWithResult 实现 Callable 最近开始学习基于Java的并发,我在windows(jdk 11)上运行以下代码 import java.util.*; import java.util.concurrent.*; class TaskWithResult implements Callable<String>{ private int id; public TaskWithResult(int id){ this.id = id; } public String call(){ return "Result of TaskWithResult "+id; } } public class TestCallable{ public static void main(String[] args){ ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> results = new ArrayList<Future<String>>(); for(int i = 0;i<10;i++){ results.add(exec.submit(new TaskWithResult(i))); for(Future<String> fs:results){ try{ System.out.println(fs.get()); }catch(InterruptedException e){ System.out.println(e); return; }catch(ExecutionException e){ System.out.println(e); }finally{ exec.shutdown(); } } } } } 每次运行都会出现sanme异常: \\output: Result of TaskWithResult 0 Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@380fb434[Not completed, task = me.rexjz.a.TaskWithResult@21bcffb5] rejected from java.util.concurrent.ThreadPoolExecutor@3cda1055[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1] at java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2055) at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:825) at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1355) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) at javaBin/me.rexjz.a.TestCallable.main(TestCallable.java:22) 代码摘自Thinging in Java(4th),我初步猜测是在所有任务提交之前驱动main()执行的隐式线程shutdown(),因为第一个任务执行成功并且异常信息表明 pool size= 1,但这是不可能的,因为 main() 中的所有内容都是顺序执行的。所有 Callable 对象都应该在关闭之前提交。 然后我把ThreadPool的类型改为Executors.newFixedThreadPool(10),还是出现了Exception,池大小还是1。 这是怎么发生的? 如果你仔细观察你的 for 循环,你就会发现问题(特别是当代码按照惯例缩进时): for (int i = 0; i < 10; i++) { results.add(exec.submit(new TaskWithResult(i))); for (Future<String> fs : results) { try { System.out.println(fs.get()); } catch (InterruptedException e) { System.out.println(e); return; } catch (ExecutionException e) { System.out.println(e); } finally { exec.shutdown(); } } } 请注意,查询每个 for 的 Future 循环是 nested 于提交任务的 for 循环内。这意味着您提交一个任务,等待结果,关闭执行器,然后尝试提交另一项任务。以下应该可以解决您的问题: for (int i = 0; i < 10; i++) { results.add(exec.submit(new TaskWithResult(i))); } executor.shutdown(); // shutdown() allows already-submitted tasks to execute for (Future<String> fs : results) { try { System.out.println(fs.get()); } catch (InterruptedException e) { e.printStackTrace(); return; } catch (ExecutionException e) { e.printStackTrace(); } } 我移动了 executor.shutdown() 调用,因为这只需要在您提交最后一个任务后发生一次。当然,如果您要继续重用执行器,那么您就不想关闭它。 我还将System.out.println(e)更改为e.printStackTrace()。通常最好打印堆栈跟踪,而不仅仅是打印异常类型和消息(默认情况下,这是 Throwable#toString() 返回的内容)。在像您的示例这样的短程序中,它可能并不明显,但堆栈跟踪在更复杂的应用程序中非常有价值,因为它直接指向抛出异常的位置。请参阅什么是堆栈跟踪,以及如何使用它来调试应用程序错误?了解更多信息。 package com.springboot.testapplication; import java.util.*; import java.util.concurrent.*; class TaskWithResult implements Callable<String> { private int id; public TaskWithResult(int id) { this.id = id; } public String call() { return "Result of TaskWithResult " + id; } } public class TestCallable { public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); ArrayList<Future<String>> results = new ArrayList<Future<String>>(); for (int i = 0; i < 10; i++) { results.add(exec.submit(new TaskWithResult(i))); } for (Future<String> fs : results) { try { System.out.println(fs.get()); } catch (InterruptedException e) { System.out.println(e); return; } catch (ExecutionException e) { System.out.println(e); } finally { exec.shutdown(); } } } } 在shutDown()或awaitTermination()之前编写invokeAny()或invokeAll()方法。 Integer result = executorService.invokeAny(futureList); System.out.println(result); executorService.shutdown();

回答 3 投票 0

有人可以告诉我 mi Task.await 有什么问题吗?

有了这段代码,我希望可以让孩子为给定的 number_list 执行 is_prime 函数并返回结果,但我在从 Task.await 方法检索结果时遇到问题。 定义修改...

回答 1 投票 0

原子值更改时线程任务不退出

我面临的问题是,当我在控制台中键入“exit”时,应用程序不会退出。它卡在以下线程中: 无效服务器::handleClientConnections(int

回答 1 投票 0

GDAL ogr2ogr 使用多处理的替代方案

我正在使用 GDAL 的 ogr2ogr 将 AutoCAD DXF 文件转换为 GeoJSON。我需要转换的一些文件最大为 1.4GB。从功能上来说,ogr2ogr 可以很好地完成这项工作,但是这些大型 DXF 文件可以......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.