问题标签 [multiprocessing]
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.
linux - 同步 shell 脚本执行
shell 脚本的修改版本将音频文件从 FLAC 转换为 MP3 格式。该计算机具有四核 CPU。该脚本使用以下命令运行:
这会将flac
目录中的 FLAC 文件(文件名中没有空格)转换为目录中的 MP3 文件mp3
(与 同级flac
)。如果目标 MP3 文件已存在,则脚本会跳过该文件。
问题是有时脚本的两个实例几乎同时检查是否存在同一个 MP3 文件,从而导致 MP3 文件损坏。
您将如何多次运行脚本(即每个内核一次),而不必在每个命令行上指定不同的文件集,并且不覆盖工作?
更新 - 最小竞争条件
该脚本使用以下锁定机制:
但是,这仍然留下了竞争条件。
visual-studio-2005 - 如何为并行构建生成 pdb 文件?
当使用Visual Studio 2005运行多个 devenv.com 时,我们正在寻求解决链接/pdb 生成问题的想法。
在使用 devenv.com 进行并行构建时,我们会遇到以下间歇性错误。即,当以下在同一构建服务器上同时运行时:
我们想要pdb文件,所以关闭它们并不是一个真正的选择。连续运行构建不会导致问题,但当然会减慢构建过程。
迄今为止发现的参考文献表明
- 文件名长度超过 256 个文件路径限制存在问题,这似乎不是我们的问题,因为我们可以单独构建,路径+文件名长度约为 160 个字符。
- 增量构建存在问题(但主要在 Visual Studio 2008 中),我们关闭了增量链接。
如果可能的话,我们正在寻找解决这个多进程问题的意见。
我们如何解决它?
python - python多处理代理
我有两个过程:
第一个过程是manager.py 从背景开始:
第二个是consumer.py应该使用管理器中定义的注册对象:
在后台运行管理器,而不是消费者我收到错误消息: RuntimeError: maximum recursion depth exceeded,当使用addChild进入消费者时,我可以正确使用setName。
方法addChild和setName属于CompositeDict,我想被代理了。
怎么了?
CompositeDict覆盖本机__getattr__ __ 方法并包含在错误消息中。我想,在某种程度上,它没有使用正确的__getattr__方法。如果是这样我怎么能解决这个问题?
详细的错误信息是:
python - multiprocessing.Process 的日志输出
在 python 中使用 multiprocessing.Process 类时,有没有办法记录给定 Process 的 stdout 输出?
python - 使用pyodbc进行Python多处理和数据库访问“不安全”?
问题:
我收到以下回溯,但不明白它的含义或如何解决它:
情况:
我有一个充满待处理数据的 SQL Server 数据库。我正在尝试使用多处理模块来并行化工作并利用我计算机上的多个内核。我的一般班级结构如下:
- 我的管理器类
- 这是程序开始的主类。
- 它创建了两个 multiprocessing.Queue 对象,一个
work_queue
和一个write_queue
- 它还创建并启动其他进程,然后等待它们完成。
- 注意:这不是multiprocessing.managers.BaseManager() 的扩展
- 我的读者类
- 此类从 SQL Server 数据库中读取数据。
- 它将项目放在
work_queue
.
- 我的工人阶级
- 这是工作处理发生的地方。
- 它从 中获取项目
work_queue
并将完成的项目放入write_queue
.
- 我的作家类
- 该类负责将处理后的数据写回 SQL Server 数据库。
- 它从
write_queue
.
这个想法是,将有一名经理、一名读者、一名作家和许多工人。
其他详情:
我在stderr中得到了两次回溯,所以我认为它发生在读者和作者一次。我的工作进程创建得很好,但只是坐在那里,直到我发送一个 KeyboardInterrupt,因为它们在work_queue
.
读取器和写入器都有自己的数据库连接,在初始化时创建。
解决方案:
感谢 Mark 和 Ferdinand Beyer 的回答和问题导致了这个解决方案。他们正确地指出 Cursor 对象不是“pickle-able”,这是多处理用于在进程之间传递信息的方法。
我的代码的问题是,MyReaderClass(multiprocessing.Process)
两者都以他们的方法MyWriterClass(multiprocessing.Process)
连接到数据库。__init__()
我在 中创建了这两个对象(即称为它们的 init 方法)MyManagerClass
,然后调用了start()
.
所以它会创建连接和游标对象,然后尝试通过pickle将它们发送到子进程。我的解决方案是将连接和游标对象的实例化移动到 run() 方法,直到子进程完全创建后才会调用该方法。
python - 将 multiprocessing.Queue 转储到列表中
我希望将 a 转储multiprocessing.Queue
到列表中。对于该任务,我编写了以下函数:
但由于某种原因,它不起作用。
观察以下 shell 会话:
这里发生了什么事?为什么不是所有的物品都被倾倒?
python - python多处理中的字符串参数
我正在尝试将字符串参数传递给进程中的目标函数。不知何故,字符串被解释为与字符一样多的参数列表。
这是代码:
我得到这个输出:
我究竟做错了什么?我应该如何通过一个字符串?
谢谢,爱丽儿
python - Python多处理:限制使用的核心数量
我想知道如何将 N 个独立任务分配给具有 L 个内核的机器上的 M 个处理器,其中 L>M。我不想使用所有处理器,因为我仍然希望 I/O 可用。我尝试过的解决方案似乎已分发到所有处理器,从而使系统陷入困境。
我认为多处理模块是要走的路。
我做数值模拟。我的背景是物理学,而不是计算机科学,所以不幸的是,我经常不能完全理解涉及标准任务模型(如服务器/客户端、生产者/消费者等)的讨论。
以下是我尝试过的一些简化模型:
假设我有一个run_sim(**kwargs)
运行模拟的函数(见下文),以及一长串用于模拟的 kwarg,并且我有一台 8 核机器。
当我用“top”和“1”查看处理器使用情况时,无论哪种情况,所有处理器似乎都被使用了。我误解了“top”的输出并不是不可能的,但是如果它run_simulation()
是处理器密集型的,那么机器就会严重陷入困境。
假设模拟和数据:
python - 多处理器机器上的 Python:多处理或非 GIL 解释器
这更像是一个风格问题。对于真正受益于拥有多个内核的 CPU 绑定进程,您通常使用多处理模块还是使用带有没有 GIL 的解释器的线程?我只是轻轻地使用了多处理库,但除了 CPython 之外也没有任何经验。我很好奇首选的方法是什么,如果它是使用不同的解释器,哪一个。
python - 使用工人的多处理池
我编写了以下代码以使我的第二个懒惰的 CPU 内核正常工作。代码所做的基本上是首先在目录层次结构中找到所需的“sea”文件,然后执行一组外部脚本来处理这些二进制“sea”文件,以生成 50 到 100 个文本和二进制文件。正如问题的标题所暗示的那样,以并行方式提高处理速度。
这个问题源于我们在标题为“无法启动 ipcluster ”的 IPython 用户列表上进行的长时间讨论。从我对 IPython 的并行处理功能的实验开始。
问题是我无法让这段代码正确运行。如果包含“sea”文件的文件夹仅包含“sea”文件,则脚本完成其执行而不完全执行外部脚本运行。(假设我有 30-50 个外部脚本要运行,但我的多处理启用脚本仅在执行这些外部脚本链中的第一个脚本后才会耗尽。)有趣的是,如果我在已处理的文件夹(即“sea”文件)上运行此脚本预先处理并且输出文件已经在该文件夹中)然后它运行,但是这次我在线性处理时间方面得到了大约 2.4 到 2.7 倍的加速。因为我的笔记本电脑中只有一个 Core 2 Duo 2.5 Ghz CPU,所以这不是很值得期待。虽然我有一个支持 CUDA 的 GPU,但它与我目前的并行计算斗争无关 :)
您认为这个问题的根源可能是什么?
感谢您的所有意见和建议。