Python 多处理-子进程不断返回结果并保持运行

Python 多处理-子进程不断返回结果并保持运行,python,pyqt,queue,multiprocessing,communication,Python,Pyqt,Queue,Multiprocessing,Communication,是否可以让几个子进程运行某些计算,然后将结果发送到主进程(例如更新PyQt ui),但这些进程仍在运行,过了一段时间后,它们会发回数据并再次更新ui? 对于multiprocessing.queue,似乎只有在进程终止后才能发送回数据。 所以我想知道这种情况是否可能。我不知道您所说的“对于multiprocessing.queue,似乎只有在进程终止后才能发送回数据”。这正是Multiprocessing.Queue设计的使用案例 PyMOTW对于整个Python模块负载(包括多处理)来说是一个

是否可以让几个子进程运行某些计算,然后将结果发送到主进程(例如更新PyQt ui),但这些进程仍在运行,过了一段时间后,它们会发回数据并再次更新ui? 对于multiprocessing.queue,似乎只有在进程终止后才能发送回数据。
所以我想知道这种情况是否可能。

我不知道您所说的“对于multiprocessing.queue,似乎只有在进程终止后才能发送回数据”。这正是Multiprocessing.Queue设计的使用案例

PyMOTW对于整个Python模块负载(包括多处理)来说是一个很好的资源。在这里查看:

如何使用多处理和循环将正在进行的消息从子级发送到父级的简单示例:

import multiprocessing

def child_process(q):
    for i in range(10):
        q.put(i)
    q.put("done")  # tell the parent process we've finished

def parent_process():
    q = multiprocessing.Queue()
    child = multiprocessing.Process(target=child_process, args=(q,))
    child.start()
    while True:
        value = q.get()
        if value == "done":  # no more values from child process
            break
        print value
        # do other stuff, child will continue to run in separate process

我不太明白。您的意思是,如果需要超过一定时间才能完成,您希望终止该过程吗?如果这是您想要的,那么您可能应该查看信号包中的signal.alarm谢谢!所以我想知道一种情况,如果我想在不等待子进程终止的情况下从子进程中得到一些结果。子进程一直在运行,并不断地发回数据。这可能吗?是的,您只需要在每次生成新值时调用queue.put的循环中运行子进程。然后,父线程可以运行不同的循环,每次都调用queue.get.Ah。我现在明白你的意思了。我想我完全忘记了排队的用法。我会重读你分享的文章。谢谢!非常感谢你的例子。这对我理解排队很有帮助。干杯