Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理队列是否有序?_Python_Multiprocessing_Python Multiprocessing - Fatal编程技术网

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)