用例如下: 我有一个脚本运行一系列 减少(pulsar)数据的非python可执行文件。我现在使用 子流程.Popen(…,shell=True),然后将子进程的通信函数 从非python可执行文件捕获标准输出和标准错误,并使用python日志模块记录捕获的输出。在
问题是:可能的8个核心中只有一个现在大部分时间被使用。 我想产生多个进程,每个进程并行执行数据集的一部分,并且我希望跟踪进程。这是一个脚本/程序,用于分析低频射电望远镜(LOFAR)的数据。安装/管理和测试越容易越好。 我正打算构建代码来管理所有这些,但我确信它一定已经以某种简单的库形式存在。在
{cd1>你可以继续跟踪多个进程。不过,问题是读取每个进程的输出而不阻塞任何其他进程。根据平台的不同,有几种方法可以做到这一点:使用
select
模块查看哪个进程有要读取的数据,使用fnctl
模块设置输出管道非阻塞,使用线程来读取每个进程的数据(这是subprocess.Popen.communicate
本身在Windows上使用的),因为它没有其他两种选择。)不过,在每种情况下,魔鬼都在细节上。在可以为您处理所有这些问题的是Twisted,它可以根据需要生成任意多个进程,并可以使用它们生成的数据调用回调(以及其他情况)
也许Celery能满足你的需要。在
如果我正确理解你在做什么,我可能会建议一个稍微不同的方法。尝试建立一个单一的工作单元作为一个函数,然后在并行处理上分层。例如:
您还可以使用工作线程/队列模型。我认为,关键是将当前的子进程/输出捕获内容封装到一个函数中,该函数为单个数据块(无论是什么)执行工作。然后,使用几种技术中的任何一种,在并行处理块上分层是非常简单的,这里只描述了其中的两种。在
相关问题 更多 >
编程相关推荐