我正在尝试运行并行循环(免责声明:我对并行处理是新手,这可能是一个相当愚蠢的问题)。 本质上,我希望能够在并行函数中启动和终止循环,并能够不时检查其状态。
我尝试编写一个非常基本的示例(见下文),使用多处理进程和队列,其中启动子函数并开始循环。在每次迭代中,它都会向队列添加一个值,这样就可以与外部通信。然而,我从队列中得到的值是由我请求的次数得到的队列.get(). 你知道吗
运行代码,问题可能会更有意义。 另一种更简单的方法很受欢迎。你知道吗
import time
from multiprocessing import Process, Queue
def f(q):
z = 0
while True:
z = z+1
print 'z', z
q.put(['f is at z value {}'.format(z)])
time.sleep(float(0.1))
if __name__ == '__main__':
queue = Queue()
process = Process(target=f, args=(queue,))
process.start()
print 'start with z value:'
print queue.get()
time.sleep(1)
print 'now f is at z value:'
print queue.get()
time.sleep(1)
print 'terminating with z value:'
print queue.get()
process.terminate()
可以在进程之间使用^{} 或^{} 从
multiprocessing
到share the state:输出:
听起来你想要一个shared Value
PS您原来的示例不起作用,因为您每次循环时都会向队列中添加一些内容。。。你知道吗
如queue guide中所述,队列.get()
这意味着它按顺序访问对象:删除第一个对象,然后删除第二个对象,依此类推。。。这种行为是正常的,因为队列使用FIFO(先进先出)。你知道吗
因此,第一次检查队列内容队列.get()删除队列中的第一个元素。此时,队列中只有一个元素。你知道吗
你第二次检查的时候,队列.get()删除队列中的第二个元素。此时,队列中有9个元素(第一个元素已被删除);但您只能访问第二个元素。你知道吗
第三次检查队列时,删除了第三个元素,但队列中有18个元素(您已经删除了第一个和第二个元素)
要查看此行为的实际情况,请在检查队列之前添加以下行:
问题是,如果您想检查进程的当前状态,队列不是这样做的方法,因为它排队等待消息,所以它不报告当前状态。你知道吗
相关问题 更多 >
编程相关推荐