我正在尝试学习如何将项目拆分为几个cpu以使其更快, 这就是我想要实现的目标:
我有一份清单。 将该列表拆分为较小的块。 每个块都是一个线程,进程等... 对于块中的每个项目,将其从初始列表中删除。 最后,主列表应为空
基本上将此列表分成几个人,每个人都会删除它的项目。
我仍然需要处理分割块的功能,因为它没有正确容纳主列表的最后一项。
这是我的第一次测试:
from thread import start_new_thread
global lista
lista = range(10, 25)
def print_list(a_list):
for i in a_list:
lista.remove(i)
return
def chunks(lista, num_parts, return_tuples=True):
"""
split a lista into sections.
:param lista: list that will be splited
:param num_parts: amount of sections
:return: a list of tuples
"""
n = len(lista)/num_parts
list_of_tuples = zip(*[iter(lista)]*n)
if return_tuples is False:
list_of_list=[]
for i in list_of_tuples:
list_of_list.append(list(i))
return list_of_list
return list_of_tuples
splited_list = chunks(lista, 4, return_tuples=False)
print splited_list
start_new_thread(print_list, (splited_list[0],))
这就是我得到的:
[[10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]
Unhandled exception in thread started by
sys.excepthook is missing
lost sys.stderr
我的第二个测试是使用线程:
from threading import Thread
global lista
lista = range(10, 25)
def print_list(a_list):
for index, i in enumerate(a_list):
lista.remove(i)
def chunks(lista, num_parts, return_tuples=True):
"""
split a lista into sections.
:param lista: list that will be splited
:param num_parts: amount of sections
:return: a list of tuples
"""
n = len(lista)/num_parts
list_of_tuples = zip(*[iter(lista)]*n)
if return_tuples is False:
list_of_list=[]
for i in list_of_tuples:
list_of_list.append(list(i))
return list_of_list
return list_of_tuples
splited_list = chunks(lista, 4, return_tuples=False)
print splited_list
t = Thread(target=print_list, args=(splited_list[0],))
t.start()
# t = Thread(target=print_list,args=(splited_list[1],))
# t.start()
print "\n------"
print lista
print splited_list
在这个中,并没有给我任何错误,但列表仍然完成。
我错过了什么吗?
答案 0 :(得分:0)
您不应该使用thread
- 模块,它是一个内部模块(因此在Python 3中重命名为_thread
)。在第一个示例中,主程序在线程之前终止,并且某些资源不再可用。始终使用threading
。