我想读取一个浮点数流,做一些简单的计算并将值附加到全局列表中。你能说出我弄错了吗?该列表没有附加。
from random import random
from time import sleep
def process(x):
from random import random
sleep(random()*2)
t = x * 2
processed_queue.append(t)
print(processed_queue)
return t
if __name__ == "__main__":
from distributed import Client
from queue import Queue
client = Client()
processed_queue = []
input_q = Queue()
remote_q = client.scatter(input_q)
processed_q = client.map(process, remote_q)
result_q = client.gather(processed_q)
for i in [random() for x in range(100)]:
sleep(random())
input_q.put(i)
print(i)
print(processed_queue)
print(result_q.qsize())
答案 0 :(得分:0)
虽然queue.Queue
和multiprocessing.Queue
可用于在线程和进程之间发送数据,但通常这种编程旁边的效果不是dask鼓励的模型。
您可以将数据传递给群集执行的功能,并使用client.submit
实时获取其返回值,除此之外您不能做什么队列?另外,有一些dask结构,比如共享变量可能会这样做,但是(再次)很少使用,我认为不太适合你的范例。
由于代码不适合您的特定原因:Client()
为调度程序创建至少一个单独的进程,为具有一个或多个线程的worker创建一个(请参阅任务管理器,顶部或其他系统观看工具)。 queue.Queue
是进程本地的,因此每个进程都会看到空队列并添加到其中,但是在主进程中看不到该信息,并且在工作程序中看不到输入队列上的操作。