问题标签 [concurrent-processing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
259 浏览

scala - 如果另一个未来失败了,如何取消未来的行动?

我有 2 个期货(对 db 表执行 2 个操作),我希望在保存修改之前检查两个期货是否已成功完成。

现在,我在第一个未来(作为依赖项)中开始第二个未来,但我知道这不是最好的选择。我知道我可以使用for-comprehension 并行执行两个期货,但即使一个失败,另一个也会被执行(尚未测试)

在这种情况下,如果第一个未来成功执行,第二个可能会失败。我想恢复第一个未来的更新。我听说过 SQL 事务,似乎是这样的,但是如何呢?

在我的情况下, A -for理解要好得多,因为我在这两个期货之间没有依赖关系并且可以并行执行,但这并不能解决我的问题,结果可以是 (success, success) 或 (failed, success)例子。

0 投票
2 回答
282 浏览

c# - 如何在 parallel.for 中强制执行一系列有序执行?

我有一个简单的并行循环做事,然后我将结果保存到一个文件中。

为了节省,我需要按正确的顺序编写结果。通过将结果放入 中,结果resultArray的顺序再次正确。

但是,由于结果非常大并且占用大量内存。我想按顺序处理项目,例如四个线程启动并处理项目 1-4,下一个空闲线程处理项目 5,依此类推。

有了这个,我可以启动另一个线程,监视数组中接下来需要写入的项目(或者每个线程可以在项目完成时发出一个事件),所以我已经可以开始编写第一个结果,而后面的项目是仍在处理中,然后释放内存。

Parallel.For 是否可以按给定顺序处理项目?我当然可以使用 a concurentQueue,将所有索引按正确的顺序放在那里并手动启动线程。

但如果可能的话,我想保留在“Parallel.For”实现中使用多少线程等的所有自动化。

免责声明:我无法切换到ForEach,我需要i.

编辑#1:
目前,执行顺序是完全随机的,一个例子:

编辑#2:
完成的工作的更多细节:

我处理灰度图像,需要为每个“层”(上例中的项目)提取信息,所以我从 0 到 255(对于 8 位)并在图像上执行任务。

我有一个类可以同时访问像素值:

循环是

而且我还想启动一个线程进行保存,检查接下来需要写入的项目是否可用,写入它,从内存中丢弃。为此,最好按顺序开始处理,以便结果大致按顺序到达。如果第 5 层的结果是倒数第二个,我必须等待写第 5 层(以及所有后续)直到最后。

如果启动 4 个线程,开始处理第 1-4 层,当一个线程完成后,开始处理第 5 层,下一个第 6 层等等,结果将或多或少以相同的顺序出现,我可以开始将结果写入文件并从内存中丢弃它们。

0 投票
1 回答
219 浏览

python - Python concurrent.futures 尝试导入函数

所以我得到了 2 个 .py 文件,并试图将测试函数从第一个导入到第二个。但是每次我尝试时,我都会得到一个“BrokenProcessPool:进程池中的一个进程在未来正在运行或挂起时突然终止。” 错误。我不知道我搞砸了帮助非常感谢

并行.py:

并行2.py:

0 投票
1 回答
232 浏览

python - Python多处理:有效地只保存最好的运行

我阅读了很多关于使用该multiprocessing模块进行并行化的帖子,但没有一篇能完全回答我的问题。

我有一个很长的生成器给我参数值,并且对于每个我想计算一些函数值。但是,我只想保存最好的n,因为我只对最好的感兴趣,保存所有结果会炸毁 RAM。在我看来,有两种方法可以做到这一点:1)在保存最佳值的进程之间使用公共共享内存,或者 2)为每个核心/进程保留单独的最佳结果列表,然后手动合并这些一起列出。

我认为第二种方法会更好,但是我不确定如何实现。这是我到目前为止得到的:

这与我想做的有点相似。但我真的很关心性能,在实际代码中,最佳值的比较/保存会更加复杂,所以我认为共享内存方法会非常慢。

我的问题归结为:如果我有例如 8 个内核,我怎么能有 8 个列表,每个列表对应一个将返回的内核的最佳结果,以便内核完全独立且相当快速地工作?

非常感谢!

0 投票
1 回答
44 浏览

python-3.x - 使用多处理并行化列表项附加到 dict

我有一个包含字符串的大列表。我希望从此列表中创建一个字典,以便:

list = [str1, str2, str3, ....]

dict = {str1:len(str1), str2:len(str2), str3:len(str3),.....}

我的解决方案是一个 for 循环,但它花费了太多时间(我的列表包含近 1M 元素):

我希望在 python 中使用多处理模块以利用所有内核并减少进程执行所需的时间。我遇到了一些粗略的例子,涉及管理器模块在不同进程之间共享 dict 但无法实现它。任何帮助,将不胜感激!

0 投票
0 回答
27 浏览

python - 使用 windows PoweShell 并行处理 8 个 python 进程 {}-section

我有一个需要运行 8 次的 python 脚本,包含 8 个不同.txt的文件。我正在尝试使用parallel{}PowerShell 中的 -section 来执行此操作。

但是这不起作用,script.py.

我已经在正确的目录中,事实上,如果我这样做python bin/script.py config/file1.txt就可以了。

调用workflow意味着目录已更改?我不明白为什么它不在工作目录中运行。

0 投票
1 回答
66 浏览

python - 不同网络上不同机器上的 Python 代码并行化

我希望在不同网络上的两台计算机上使用并行代码来执行一批任务,但不确定如何在 Python 中执行此操作。

假设我在两个不同的网络上有两台计算机,计算机 A 和计算机 B,我有一批 100 个任务要完成。天真地,我可以分配计算机 A 和计算机 B 各自执行 50 个任务,但如果计算机 A 在计算机 B 之前完成它的任务,我希望计算机 A 承担计算机 B 的一些剩余任务。两台计算机都应将其任务的结果返回到我的本地计算机。如何才能做到这一点?

0 投票
1 回答
442 浏览

python - 使用ray并行化模拟器python

我是 ray 新手,我正在尝试并行化我开发的模拟器。这是我的模拟器的一个例子,显然它更复杂。

到目前为止,我已经尝试通过以下两种方式@ray.remote Model类 (1) 和类 (2) 上使用带有装饰器的 ray:ManyModel

(1)

( 2)

在这两种方式中,我都没有从使用 ray 库中获得任何好处。你能帮我使用吗?

方法(1) 的更新第一种方法的问题是我收到了这个警告信息

2020-11-09 11:33:20,517 WARNING worker.py:1779 -- WARNING: 12 PYTHON workers have been started. This could be a result of using a large number of actors, or it could be a consequence of using nested tasks (see https://github.com/ray-project/ray/issues/3644) for some a discussion of workarounds.

使用 10 xModel 这是性能结果: 不使用射线:10 x Model -> do_step 0.11 [s] 使用射线 (1):10 x Model -> do_step 0.22 [s]

此外,每次我使用方法 (1) 创建一个 Actor 时,它都会复制导入库的所有 global_objects 并且 ram 消耗变得疯狂。我需要用超过 10 万个Model 对象进行午餐模拟。

总的来说,我不明白在 ray 中创建多个演员是否是个好主意。

0 投票
1 回答
61 浏览

python - 在 Python(Kivy) 中每 5 秒安排一次作业

我想安排每 5 秒后完成一个作业,这需要大约 3 秒来执行。我用过

至今。但是第一个块是我的设计,因为它在主线程中执行,第二个块到达

RecursionError:调用 Python 对象时超出最大递归深度

从长远来看。我被困在这里,有没有人可以帮助我?谢谢

注意:我正在使用 kivy 开发桌面应用程序。

0 投票
1 回答
91 浏览

python - 我可以在 python 中创建一个“全局”、完全连接的图,并在 Pool.map() 处理中从并发工作人员同时更新吗?

我想在 python 中并行构建一个完全连接的图,并获得一个边缘值列表,例如:以字典格式存储:
( node1, node2 ) = edge_value

{ ( node1, node2 ) : edge_value [, ... [, ... ] ] }

为此,我必须首先初始化两个global变量,G用于图形和f_correlation所述字典

然后创建一个函数来构造图形并将其存储到
字典中:( node1, node2 ) = edge_valuef_correlation

然后multiprocessing.Pool()创建一个-instance并调用它的.map()-method,让代码同时执行:

但是当我运行它无限运行的代码时,从不打印“DONE”

问题之一可能是global-variable 问题,在Globals variables and Python multiprocessing中讨论

但是对于我的工作,我需要全局更新字典和Connected Graph 。

我该怎么做或者我应该做哪些修改才能使它工作?