我正在尝试创建一个类,而不是可以运行一个单独的进程去做一些需要很长时间的工作,从主模块中启动一堆这些,然后等待它们全部完成.我想一次启动流程,然后继续为他们提供待办事项,而不是创建和销毁流程.例如,也许我有10个运行dd命令的服务器,然后我希望它们全部scp文件等.
我的最终目标是为每个系统创建一个类,用于跟踪与其绑定的系统的信息,如IP地址,日志,运行时等.但该类必须能够启动系统命令然后返回在系统命令运行时执行回执行调用程序,以便稍后跟随系统命令的结果.
我的尝试失败了,因为我无法通过pickle将管道上的类的实例方法发送到子进程.那些不是pickleable.因此,我试图以各种方式解决它,但我无法弄明白.如何修补我的代码呢?如果你不能发送任何有用的东西,多处理有什么用呢?
是否有与类实例一起使用的多处理的良好文档?我可以使多处理模块工作的唯一方法是简单的功能.在类实例中使用它的每次尝试都失败了.也许我应该通过事件呢?我还不明白该怎么做.
import multiprocessing
import sys
import re
class ProcessWorker(multiprocessing.Process):
"""
This class runs as a separate process to execute worker's commands in parallel
Once launched, it remains running, monitoring the task queue, until "None" is sent
"""
def __init__(self, task_q, result_q):
multiprocessing.Process.__init__(self)
self.task_q = task_q
self.result_q = result_q
return
def run(self):
"""
Overloaded function provided by multiprocessing.Process. Called upon start() signal
"""
proc_name = self.name
print '%s: Launched' % (proc_name)
while True:
next_task_list = self.task_q.get()
if next_task …Run Code Online (Sandbox Code Playgroud)