python如何收集数据_如何在python中从多个线程收集数据?

我希望在Python中使用多个线程来计算一个图像的像素值,最终将被构造出来,尽管我很难弄清楚如何返回并收集线程的结果。设置如下:

将创建一个Queue.Queue()对象,以及一个threading.Thread()类子类:q = Queue.Queue()

class myThread(threading.Thread):

def __init__(self, queue):

self.queue = queue

threading.Thread.__init__(self)

def run(self):

while True: # loop forever

task = self.queue.get()

rs = self.do_work(task) # I've got the result; now what to do with it?

self.queue.task_done()

我的想法是收集500x500图像的像素数据,最初是250000(500x500)个元素的列表,最终将用PIL生成图像:

^{pr2}$

因此,我用每个像素的任务填充队列,并生成一个线程池:for i in range(5):

t = myThread(q)

t.setDaemon(True)

t.start()

for y in range(500):

for x in range(500):

q.put({'x':x, 'y':y})

q.join()

那么如何收集所有的数据呢?我认为将250000个元素列表传递给每个线程不是一个好主意,因为每个线程都会丢失来自其他线程的数据。在

编辑:

对于那些想知道是否值得用多线程的方式来计算图像坐标的人来说,计算图像坐标的工作是几个perlin噪声函数。它生成一个perlin2d噪声点阵列(5x5网格),加上几个倍频程(10x10、20x20和40x40网格),并计算这些点之间的像素值。因此,对于最终图像中的每个像素,它必须对每个倍频程进行三次数学运算(给定点周围的X点平均值,给定点周围的Y点平均值,以及这些平均值的平均值),然后在倍频程结果之间进行加权平均。在

在我的8核Mac上,我看到Python进程在运行时使用1个线程和100%的处理器。虽然我知道我有8个内核,并且已经看到进程表明有400-600%的处理器使用表明他们正在利用其他核心,我只是希望这个Python脚本也能做到这一点。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值