Python中的循环简单多线程

时间:2016-08-09 16:35:51

标签: python multithreading iteration

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

例如,我怎样才能多线程化这个循环?

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

有没有办法像4个线程一样削减它,所以每个线程有250次迭代?

3 个答案:

答案 0 :(得分:8)

最简单的方法是使用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的其他方法可能更适合您的需求 - 取决于您实际上要做的事情。

答案 1 :(得分:7)

您必须手动进行拆分:

https://www.example.com/path?paramnameone=valueone&paramnametwo=valuetwo

此代码使用多线程,这意味着所有内容都将在单个Python进程中运行(即只启动一个Python解释器)。

多处理,在另一个答案中讨论,意味着在几个Python解释器中运行一些代码(在几个进程中,而不是线程)。这可能会利用所有可用的CPU内核,因此当您专注于代码的速度(打印大量数字直到终端讨厌您!)时,这非常有用,而不是仅仅是并行处理。 1

1。 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() 原来是a wrapper around the threading modulemultiprocessing.dummymultiprocessing具有相同的接口,但第一个模块使用进程进行并行处理,而后者 - 使用线程。功能

答案 2 :(得分:1)

自 Python 3.2 起,concurrent.futures standard libraryconcurrently map a function across iterables 提供原语。由于 mapfor 密切相关,因此可以轻松地将 for 循环转换为多线程/多处理循环:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor() as executor:
    executor.map(print, range(0, 1000))