Python排列线程

was*_*256 6 python multithreading permutation

我在python中使用itertools.permutations函数生成了排列.问题是结果非常大,我想用多个线程来完成它但是真的不知道如何实现这是我到目前为止所拥有的:

perms = itertools.permutations('1234', r=4)

#I would like to iterate through 'perms' with multiple threads
for perm in perms:
    print perm
Run Code Online (Sandbox Code Playgroud)

Blc*_*ght 4

如果您想要对排列生成器中的项目执行的工作是 CPU 密集型的,那么您可能需要使用进程而不是线程。CPython 的全局解释器锁 (GIL) 在执行 CPU 密集型工作时使多线程的价值有限。

相反,使用multiprocessing模块的Pool类,如下所示:

import multiprocessing
import itertools

def do_stuff(perm):
    # whatever
    return list(reversed(perm))

if __name__ == "__main__":
    with multiprocessing.Pool() as pool: # default is optimal number of processes
        results = pool.map(do_stuff, itertools.permutations('1234', r=4))

        # do stuff with results
Run Code Online (Sandbox Code Playgroud)

请注意,如果您要进行迭代results(而不是将其作为列表执行某些操作),则可以使用imap而不是map获取迭代器,您可以使用它来处理从工作进程生成的结果。如果返回的项目顺序并不重要,您可以使用imap_unordered(我认为)节省一些内存。

if __name__ is "__main__"Windows 上需要样板,其中模块multiprocessing必须解决操作系统的限制(否fork)。