我到处搜索,但没有找到使用多线程迭代循环的任何简单示例。
例如,如何对该线程进行多线程处理?
for item in range(0, 1000):
print item
有没有办法像4个线程那样将其切开,因此每个线程都有250次迭代?
最简单的方法是使用multiprocessing.dummy(它使用线程而不是进程)和Pool
import multiprocessing.dummy as mp
def do_print(s):
print s
if __name__=="__main__":
p=mp.Pool(4)
p.map(do_print,range(0,10)) # range(0,1000) if you want to replicate your example
p.close()
p.join()
[如果您想更好地利用多个CPU,也许您也想尝试真正的多处理,但是接下来要注意几个警告和guidelines。
可能还有Pool
的其他方法会更好地满足您的需要-取决于您实际要执行的操作。
您必须手动进行拆分:
import threading
def ThFun(start, stop):
for item in range(start, stop):
print item
for n in range(0, 1000, 100):
stop = n + 100 if n + 100 <= 1000 else 1000
threading.Thread(target = ThFun, args = (n, stop)).start()
此代码使用multithreading,这意味着所有内容都将在单个Python进程中运行(即,将仅启动一个Python解释器)。
在另一个答案中讨论的Multiprocessing表示在多个Python解释器中运行某些代码(在多个processes中,而不是threads中)。这可能会利用所有可用的CPU内核,因此当您专注于代码速度(打印大量数字,直到终端讨厌您!)时,这非常有用,而不仅仅是并行处理。 1
1。原来multiprocessing.dummy
是a wrapper around the threading
module。 threading
和multiprocessing
具有相同的接口,但是第一个模块使用processes进行并行处理,而后者-使用threads。