Python多处理队列是否有序?
如果这是显而易见的,请原谅,但我无法从列表中判断使用队列时的输出是否有序。也就是说,如果输入是Python多处理队列是否有序?,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,如果这是显而易见的,请原谅,但我无法从列表中判断使用队列时的输出是否有序。也就是说,如果输入是[1,2,3],那么输出是f(1),f(2),f(3),还是会出现故障 编辑:我知道输入是用FIFO处理的。但是FIFO检索是否一定能保证结果也按顺序返回? 在FIFO队列中,添加的第一个任务是检索的第一个任务 类队列。FIFO队列的队列(maxsize=0)构造函数 是的,多处理队列是FIFO(先进先出)。多处理队列从来没有出现过无序。从文档中可以清楚地看到有三种类型先进先出,后进先出和优先级队列(定
[1,2,3]
,那么输出是f(1),f(2),f(3)
,还是会出现故障
编辑:我知道输入是用FIFO处理的。但是FIFO检索是否一定能保证结果也按顺序返回?
在FIFO队列中,添加的第一个任务是检索的第一个任务
类队列。FIFO队列的队列(maxsize=0)构造函数
是的,多处理队列是FIFO(先进先出)。多处理队列从来没有出现过无序。从文档中可以清楚地看到有三种类型<代码>先进先出,
后进先出
和优先级队列(定制订单的一种方式)。默认顺序,即类队列。队列
使用的是FIFO
在FIFO队列中,添加的第一个任务是检索的第一个任务
因此,考虑到这一点,是的,多处理队列保持顺序。否,他们将按照完成的顺序进入队列,而不是按照启动的顺序。这意味着,如果您在开始流程时考虑了特定的顺序,那么它们可能会也可能不会按照该顺序完成。如果顺序对您很重要,您应该在队列中传递带有结果的起始顺序,可能作为元组
queue.put((order,result))
。下面的示例显示了从队列中获得的随机顺序。(仍然是先进先出)
这给了我[25,16,9,0,36,64,81,1,49,4]
假设您的任务相当简单,我总是更喜欢使用Python的
Pool
功能及其相应的Pool.map()
函数,该函数确保输出顺序根据输入顺序保持 FIFO检索是否必须保证结果也按顺序返回?每次我使用多处理时,它都随机执行。例如,如果每个进程都要从1到10的数字列表中选择一个整数,那么执行都是随机的,也就是说,第一个输出可以是5,第二个输出可以是2等等。我想这就是问题所在
import multiprocessing
import random
import time
def square(x, queue):
# Sleep for a value between 0 and 1.
time.sleep(random.random())
queue.put(x**2)
queue = multiprocessing.Queue()
for i in range(10):
process = multiprocessing.Process(target = square, args = (i, queue))
process.start()
results = []
for i in range(10):
results.append(queue.get())
print (results)