如何从一个python进程查询/设置另一个python进程中的变量?
Python代码段A:如何从一个python进程查询/设置另一个python进程中的变量?,python,process,ipc,Python,Process,Ipc,Python代码段A: import time class task: def __init__(self): self.progress_percent = 0 def working(self): self.progress_percent = self.progress_percent + 1 task1 = task() task2 = task() while True: time.sleep(1) tas
import time
class task:
def __init__(self):
self.progress_percent = 0
def working(self):
self.progress_percent = self.progress_percent + 1
task1 = task()
task2 = task()
while True:
time.sleep(1)
task1.working()
task2.working()
print task1.progress_percent
print task2.progress_percent
如何从另一个单独的python进程查询甚至设置task1.progress\u percent
或task2.progress\u percent
运行时?(不是pdb)
谢谢。您可以使用多处理。过程和条件来实现这一点。请尝试以下代码:
import multiprocessing
import time
class Task(multiprocessing.Process):
counter = 0
name = None
event = None
another_tasks = set()
def __init__(self, mgr_dict, cond):
super(Task, self).__init__()
self.mgr_dict = mgr_dict
self.cond = cond
cls = self.__class__
cls.counter += 1
self.name = '{} {}'.format(cls.__name__, cls.counter)
self.mgr_dict[self.name] = 0
def value(self):
return self.mgr_dict[self.name]
def run(self):
while True:
with self.cond:
self.cond.wait()
self.mgr_dict[self.name] += 1
class SubTask(Task):
pass
class MainTask(Task):
subtasks = set()
def working(self):
with self.cond:
self.cond.notify_all()
def start(self):
super(MainTask, self).start()
for subtask in self.subtasks:
subtask.start()
def create_subtask(self):
subtask = SubTask(self.mgr_dict, condition)
self.subtasks.add(subtask)
def join(self):
self.mgr_dict[self.name]
def shutdown(self):
self.exit.set()
event = multiprocessing.Event()
if __name__ == '__main__':
mgr = multiprocessing.Manager()
mgr_dict = mgr.dict()
condition = multiprocessing.Condition()
task1 = MainTask(mgr_dict, condition)
subtask1 = task1.create_subtask()
subtask2 = task1.create_subtask()
subtask3 = task1.create_subtask()
subtask4 = task1.create_subtask()
subtask5 = task1.create_subtask()
task1.start()
while task1.value() < 100:
time.sleep(1)
task1.working()
print mgr_dict
感谢您的回复,不过我想知道的是,我是否可以从另一个单独的“python进程”中查询task.progress\u%,进程之间的“IPC”排序。。抱歉=)您可以使用共享名称空间来实现这一点。如果你愿意的话,我可以举个例子。如果你能举个例子,那么“共享名称空间”是否可以用于不同的python进程,而不是progress a生成的进程?你应该有主进程。但所有的进步都可以在过程中实现。请稍等,我将完成示例=)谢谢。我发现模块“rpyc”或“pyro”对于处理RPC和IPC访问问题都很有用。
{'MainTask 1': 0, 'SubTask 1': 0, 'SubTask 2': 0, 'SubTask 3': 0, 'SubTask 4': 0, 'SubTask 5': 0}
{'MainTask 1': 1, 'SubTask 1': 1, 'SubTask 2': 1, 'SubTask 3': 1, 'SubTask 4': 1, 'SubTask 5': 1}
.
.
.
{'MainTask 1': 100, 'SubTask 1': 100, 'SubTask 2': 100, 'SubTask 3': 100, 'SubTask 4': 100, 'SubTask 5': 100}