Python中的简单多线程循环

问题描述 投票:16回答:2

我到处搜索,但没有找到使用多线程迭代循环的任何简单示例。

例如,如何对该线程进行多线程处理?

for item in range(0, 1000):
    print item

有没有办法像4个线程那样将其切开,因此每个线程都有250次迭代?

python multithreading iteration
2个回答
11
投票

最简单的方法是使用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的其他方法会更好地满足您的需要-取决于您实际要执行的操作。


8
投票

您必须手动进行拆分:

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.dummya wrapper around the threading modulethreadingmultiprocessing具有相同的接口,但是第一个模块使用processes进行并行处理,而后者-使用threads

© www.soinside.com 2019 - 2024. All rights reserved.