【发布时间】:2018-02-12 15:55:51
【问题描述】:
是否有可能让一些子进程运行一些计算,然后将结果发送到主进程(例如更新 PyQt ui),但这些进程仍在运行,一段时间后它们会发回数据并再次更新 ui? 使用 multiprocessing.queue,似乎数据只能在进程终止后发回。 所以我想知道这种情况是否可能。
【问题讨论】:
标签: python pyqt queue multiprocessing communication
是否有可能让一些子进程运行一些计算,然后将结果发送到主进程(例如更新 PyQt ui),但这些进程仍在运行,一段时间后它们会发回数据并再次更新 ui? 使用 multiprocessing.queue,似乎数据只能在进程终止后发回。 所以我想知道这种情况是否可能。
【问题讨论】:
标签: python pyqt queue multiprocessing communication
我不知道您所说的“使用 multiprocessing.queue,似乎数据只能在进程终止后才能发回”。这正是 Multiprocessing.Queue 设计的用例。
PyMOTW 是大量 Python 模块(包括多处理)的绝佳资源。在这里查看:https://pymotw.com/2/multiprocessing/communication.html
一个如何使用多处理和循环从子级向父级发送持续消息的简单示例:
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
【讨论】: