如何使函数在多处理通信中运行

2024-04-20 04:01:57 发布

您现在位置:Python中文网/ 问答频道 /正文

当真循环进行迭代时,我想发出一个信号,用整数、字典或字符串等数据更新等待它的Child.process。在PyQt中 可以使用PyQt.Signal对象来完成。Qt信号对象可以设置为字符串、dict或列表。使用signal.emit方法可以“发出”一个可以被另一个对象“捕获”的变量。如何使函数process在不使用PyQt信号对象的情况下与子对象和/或父对象交互

import time, multiprocessing

def process():
    num = int()
    while True:
        print '...sleeping %s' % num
        time.sleep(1)
        num += 1
        if num > 10:
            break
    return time.time() 


class Child(object):
    def __init__(self):
        super(Child, self).__init__()

    def process(self):
        proc = multiprocessing.Process(target=process)
        proc.start()

class Parent(object):
    def __init__(self):
        super(Parent, self).__init__()
        child = Child()
        time_completed = child.process()
        print 'time_completed: %s' % time_completed



obj = Parent()

Tags: 对象字符串selfchildtime信号initdef
1条回答
网友
1楼 · 发布于 2024-04-20 04:01:57

使用multiprocessing.Queue对象使process函数与child通信,然后与parent对象通信:

import time, multiprocessing

def process(queue):
    num = int()
    while True:
        queue.put('...sleeping %s' % num)
        time.sleep(1)
        num += 1
        if num > 5:
            break
    queue.put('...time completed %s' % time.time() ) 
    time.sleep(0.1)

class Child(object):
    def __init__(self):
        super(Child, self).__init__()
        self.queue = multiprocessing.Queue()
        self.proc = multiprocessing.Process(target=process, args=(self.queue,))

    def process(self):
        self.proc.start()

class Parent(object):
    def __init__(self):
        super(Parent, self).__init__()
        children = [Child() for i in range(3)]

        for child in children:
            child.process()

        for child in children:
            if child.proc.is_alive():
                if not child.queue.empty():
                    print child.queue.get()

obj = Parent()

相关问题 更多 >