我正在编写一个脚本,从一个表中获取N条记录,并通过多线程处理这些记录。在
以前我只是在每个worker定义中的SQL语句中使用Order by RAND(),并希望不会有重复项。在
这类工作(重复数据删除稍后完成),但是,我希望通过以下方式使我的脚本更高效:
1)查询一次表,提取N条记录,并将它们分配给一个列表
2)将大列表拆分为大小相等的Y列表,可以通过以下方式实现:
number_of_workers = 2
first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack']
def chunkify(lst,n):
return [lst[i::n] for i in xrange(n)]
list1 = chunkify(first_names, number_of_workers)
print list1
3)在多线程中定义worker函数时,将不同的子列表传递给每个worker。注意-worker的数量(以及我想将查询结果分割成的部分)在函数的开头定义。
然而,由于我对Python相当陌生,我不知道如何将每个子列表传递给一个单独的worker(或者它是否可行?)
任何帮助,其他建议等都将不胜感激!在
下面是多线程代码的示例。我该如何使用
^{pr2}$提前谢谢你!在
两件事:
首先,看一下Queue对象。你甚至不需要用这种方式把名单分开。它用于在多个线程之间分割一个对象集合(还有一个多进程变量,这就是我要讨论的)。这些文档包含了非常好的符合您要求的示例。在
其次,除非你的工作人员需要等待IO、网络请求等,否则python中的线程处理并不比顺序处理快(实际上可能慢)。线程不使用多重处理,一次只运行一个线程。如果这是您的情况,您可能需要Multiprocessing,它实际上会启动一个全新的python进程来工作。这里有类似的工具,比如queues。在
正如SCB提到的,这是通过利用que来解决的。 下面是一个快速的示例,它使用一个名称列表->;将一个名称传递给每个工作人员(2个工作人员)>;每个工作人员只打印所给的名称。在
代码改编自here。在
相关问题 更多 >
编程相关推荐