- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 python 中的标准多处理来生成一堆将无限期运行的进程。我不是特别关心性能;每个线程只是在监视文件系统上的不同更改,并在文件被修改时采取适当的操作。
目前,我有一个解决方案可以在 Linux 中满足我的需要。我有一个函数和参数字典,如下所示:
job_dict['func1'] = {'target': func1, 'args': (args,)}
我为每个人创建了一个流程:
import multiprocessing
for k in job_dict.keys():
jobs[k] = multiprocessing.Process(target=job_dict[k]['target'],
args=job_dict[k]['args'])
有了这个,我可以跟踪每个正在运行的作业,并在必要时重新启动因任何原因崩溃的作业。
这在 Windows 中不起作用。我使用的许多函数都是包装器,使用各种 functools
函数,我收到有关无法序列化函数的消息(请参阅 What can multiprocessing and dill do together? )。我还没有弄清楚为什么我在 Linux 中没有收到此错误,但在 Windows 中却收到了。
如果我在 Windows 中启动我的进程之前导入 dill
,我不会收到序列化错误。但是,这些进程实际上并没有做任何事情。我不知道为什么。
然后我切换到 pathos
中的多处理实现,但没有找到与标准 multiprocessing
模块中的简单 Process
类类似的类.我能够使用 pathos.pools.ThreadPool
为每个作业生成线程。这不是 map 的预期用途,我敢肯定,但它启动了所有线程,并且它们在 Windows 中运行:
import pathos
tp = pathos.pools.ThreadPool()
for k in job_dict.keys():
tp.uimap(job_dict[k]['target'], job_dict[k]['args'])
但是,现在我不确定如何监视线程是否仍然处于事件状态,我正在寻找它以便我可以重新启动由于某种原因而崩溃的线程。有什么建议吗?
最佳答案
我是pathos
和dill
的作者。 Process
类深埋在 pathos
的 pathos.helpers.mp.process.Process
中,其中 mp
本身是 multiprocessing
库的实际分支。 multiprocessing
中的所有内容都应该可以从那里访问。
关于 pathos
的另一件事是,它会为您保持 pool
事件,直到您将其从保持状态中删除。这有助于减少创建"new"池的开销。要删除池,您需要执行以下操作:
>>> # create
>>> p = pathos.pools.ProcessPool()
>>> # remove
>>> p.clear()
但是,Process
没有这样的机制。
对于 multiprocessing
,windows 与 Linux 和 Macintosh 不同……因为 windows 没有像 linux 上那样的适当的 fork
……linux 可以跨进程共享对象,而在Windows 没有共享......它基本上是一个完全独立的新进程创建......因此序列化必须更好,以便对象传递到另一个进程 - 就像你将对象发送到另一台计算机一样。在 Linux 上,您必须这样做才能获得相同的行为:
def check(obj, *args, **kwds):
"""check pickling of an object across another process"""
import subprocess
fail = True
try:
_x = dill.dumps(x, *args, **kwds)
fail = False
finally:
if fail:
print "DUMP FAILED"
msg = "python -c import dill; print dill.loads(%s)" % repr(_x)
print "SUCCESS" if not subprocess.call(msg.split(None,2)) else "LOAD FAILED"
关于python - 多处理 -> pathos.multiprocessing 和 windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31732989/
我有一个任务,我正在尝试与 pathos 并行处理。当我运行非并行版本时,它运行得很好。但是,运行 1 个进程的 pathos 池会导致运行时错误:超出最大递归深度。 例如: import patho
我的一个代码可以 from pathos.multiprocessing import ProcessingPool def myFunc(something): thispool = Pro
import pathos.multiprocessing as mp class Model_Output_File(): """ Class to read Model Outpu
我正在使用 pathos.multiprocessing 来并行化需要使用实例方法的程序。这是一个最小的工作示例: import time import numpy as np from pathos
我正在使用多处理和 pathos 编写一些 python 代码。我写了一个小测试程序来习惯使用多处理,它在我的本地机器上运行良好,但它拒绝在不同的集群上运行。 我收到以下错误: Traceback (
我有在 Windows 上运行的 Python 代码,但是在 Linux 上运行时它只是挂起。我正在使用 JPype,所以我怀疑多个共享进程试图使用同一个管道访问 Java 可能存在一些问题(创建了不
众所周知, pathos.multiprocessing 优于 Python 中的 multiprocessing 库,因为前者使用 dill 而不是 pickle 并且可以序列化更广泛的功能和其他东
在将我的大部分代码构建为 dill 序列化/酸洗之后,我还尝试使用 pathos multiprocessing 来并行化我的计算。 Pathos 它是莳萝的自然延伸。 尝试嵌套运行时 from pa
我尝试在我的项目中使用 pathos.multiprocessing.Pool。但是,当我终止Pool时,它会遇到以下问题。我使用的是 CentOS 6.5,我不确定它是由 pathos.multip
当我尝试运行以下代码时: from pathos.multiprocessing import ProcessingPool as Pool list1 = [1,2,3,4,5] list2 = [
我有一个类,它使用 GDAL 模块( https://pypi.org/project/GDAL/ )打开一个大光栅图像,并在多个位置从中提取小图像,这些位置由传递的坐标元组列表定义。我想使用 Pat
我正在尝试在 python(在 ubuntu 上)下运行并行进程。 我开始使用 multiprocessing,对于简单的示例来说效果很好。 然后出现了 pickle 错误,所以我转向了 pathos
我有一个需要运行的计算列表。我正在使用 并行化它们 from pathos.multiprocessing import ProcessingPool pool = ProcessingPool(no
我目前正在使用 python 中的标准多处理来生成一堆将无限期运行的进程。我不是特别关心性能;每个线程只是在监视文件系统上的不同更改,并在文件被修改时采取适当的操作。 目前,我有一个解决方案可以在 L
我遇到了 Pathos 的 ProcessingPool.map() 函数的低效并行化:在处理结束时,一个运行缓慢的 worker 按顺序处理列表中的最后一个任务,而其他 worker闲置。我认为这是
我遇到了 Pathos 的 ProcessingPool.map() 函数的低效并行化:在处理结束时,一个运行缓慢的 worker 按顺序处理列表中的最后一个任务,而其他 worker闲置。我认为这是
我正在尝试从 git 安装 pathos 库,但出现以下错误: >pip install https://github.com/uqfoundation/pathos Exception: Trace
我正在对我拥有的数据集运行拼写校正功能。我用过 from pathos.multiprocessing import ProcessingPool as Pool做这项工作。处理完成后,我想实际访问结
我是一名优秀的程序员,十分优秀!