问题标签 [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.
scala - 如果另一个未来失败了,如何取消未来的行动?
我有 2 个期货(对 db 表执行 2 个操作),我希望在保存修改之前检查两个期货是否已成功完成。
现在,我在第一个未来(作为依赖项)中开始第二个未来,但我知道这不是最好的选择。我知道我可以使用for
-comprehension 并行执行两个期货,但即使一个失败,另一个也会被执行(尚未测试)
在这种情况下,如果第一个未来成功执行,第二个可能会失败。我想恢复第一个未来的更新。我听说过 SQL 事务,似乎是这样的,但是如何呢?
在我的情况下, A -for
理解要好得多,因为我在这两个期货之间没有依赖关系并且可以并行执行,但这并不能解决我的问题,结果可以是 (success, success) 或 (failed, success)例子。
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 层等等,结果将或多或少以相同的顺序出现,我可以开始将结果写入文件并从内存中丢弃它们。
python - Python concurrent.futures 尝试导入函数
所以我得到了 2 个 .py 文件,并试图将测试函数从第一个导入到第二个。但是每次我尝试时,我都会得到一个“BrokenProcessPool:进程池中的一个进程在未来正在运行或挂起时突然终止。” 错误。我不知道我搞砸了帮助非常感谢
并行.py:
并行2.py:
python - Python多处理:有效地只保存最好的运行
我阅读了很多关于使用该multiprocessing
模块进行并行化的帖子,但没有一篇能完全回答我的问题。
我有一个很长的生成器给我参数值,并且对于每个我想计算一些函数值。但是,我只想保存最好的n
,因为我只对最好的感兴趣,保存所有结果会炸毁 RAM。在我看来,有两种方法可以做到这一点:1)在保存最佳值的进程之间使用公共共享内存,或者 2)为每个核心/进程保留单独的最佳结果列表,然后手动合并这些一起列出。
我认为第二种方法会更好,但是我不确定如何实现。这是我到目前为止得到的:
这与我想做的有点相似。但我真的很关心性能,在实际代码中,最佳值的比较/保存会更加复杂,所以我认为共享内存方法会非常慢。
我的问题归结为:如果我有例如 8 个内核,我怎么能有 8 个列表,每个列表对应一个将返回的内核的最佳结果,以便内核完全独立且相当快速地工作?
非常感谢!
python-3.x - 使用多处理并行化列表项附加到 dict
我有一个包含字符串的大列表。我希望从此列表中创建一个字典,以便:
list = [str1, str2, str3, ....]
dict = {str1:len(str1), str2:len(str2), str3:len(str3),.....}
我的解决方案是一个 for 循环,但它花费了太多时间(我的列表包含近 1M 元素):
我希望在 python 中使用多处理模块以利用所有内核并减少进程执行所需的时间。我遇到了一些粗略的例子,涉及管理器模块在不同进程之间共享 dict 但无法实现它。任何帮助,将不胜感激!
python - 使用 windows PoweShell 并行处理 8 个 python 进程 {}-section
我有一个需要运行 8 次的 python 脚本,包含 8 个不同.txt
的文件。我正在尝试使用parallel{}
PowerShell 中的 -section 来执行此操作。
但是这不起作用,我在script.py
.
我已经在正确的目录中,事实上,如果我这样做python bin/script.py config/file1.txt
就可以了。
调用workflow
意味着目录已更改?我不明白为什么它不在工作目录中运行。
python - 不同网络上不同机器上的 Python 代码并行化
我希望在不同网络上的两台计算机上使用并行代码来执行一批任务,但不确定如何在 Python 中执行此操作。
假设我在两个不同的网络上有两台计算机,计算机 A 和计算机 B,我有一批 100 个任务要完成。天真地,我可以分配计算机 A 和计算机 B 各自执行 50 个任务,但如果计算机 A 在计算机 B 之前完成它的任务,我希望计算机 A 承担计算机 B 的一些剩余任务。两台计算机都应将其任务的结果返回到我的本地计算机。如何才能做到这一点?
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 中创建多个演员是否是个好主意。
python - 在 Python(Kivy) 中每 5 秒安排一次作业
我想安排每 5 秒后完成一个作业,这需要大约 3 秒来执行。我用过
和
至今。但是第一个块是我的设计,因为它在主线程中执行,第二个块到达
RecursionError:调用 Python 对象时超出最大递归深度
从长远来看。我被困在这里,有没有人可以帮助我?谢谢
注意:我正在使用 kivy 开发桌面应用程序。
python - 我可以在 python 中创建一个“全局”、完全连接的图,并在 Pool.map() 处理中从并发工作人员同时更新吗?
我想在 python 中并行构建一个完全连接的图,并获得一个边缘值列表,例如:以字典格式存储:( node1, node2 ) = edge_value
{ ( node1, node2 ) : edge_value [, ... [, ... ] ] }
为此,我必须首先初始化两个global
变量,G
用于图形和f_correlation
所述字典
然后创建一个函数来构造图形并将其存储到
字典中:( node1, node2 ) = edge_value
f_correlation
然后multiprocessing.Pool()
创建一个-instance并调用它的.map()
-method,让代码同时执行:
但是当我运行它无限运行的代码时,从不打印“DONE”
问题之一可能是global
-variable 问题,在Globals variables and Python multiprocessing中讨论
但是对于我的工作,我需要全局更新字典和Connected Graph 。
我该怎么做或者我应该做哪些修改才能使它工作?