Python:在 for 循环内对函数调用进行多重处理,以便每个调用独立运行

Python: Multi-processing a function call inside for loop so that each call runs independently

我有一个加密数字并将其存储在列表中的函数

encrypted = [[0]*10]*1000

def encrypt(i):
        encrypted[i]=bin(i)[2:].zfill(10).decode('hex')

表达式比这复杂得多。我只是举个例子。

现在我想在 for 循环内调用加密函数,在不同的进程或线程中进行多次调用 - 但是由于 CPU 绑定进程的 GIL,线程不会提供帮助 - 如果我错了请纠正我。

for i in xrange(1000):
     encrypt(i)

所以循环不应该等待一个值的加密结束,下一个开始。

所以当 i=1 并且正在加密 1 时,For 循环应该递增并开始加密 2,然后同时加密 3。

加密的结果应该存储在加密列表中(结果的顺序不重要)。

好吧,先给点意见吧。根据您需要 运行 的线程数量,您应该查看 PyPy 这听起来像是可以从 pypy 的功能中获益良多的项目。

这是 Queue 文档中经过编辑的示例,如果我了解您的需要,那么这应该会为您指明正确的方向。

此代码假定您有一个加密号码列表,并且 您的加密函数处理将结果添加到列表或以某种方式存储它们。

def worker():
    while True:
        number = q.get()
        encrypt(number)
        q.task_done()

q = Queue()
for i in range(num_worker_threads):
    t = Thread(target=worker)
    t.daemon = True
    t.start()

for number in numbers:
    q.put(number)

q.join()       # block until all tasks are done

您可以使用multithreading.Pool

from multiprocessing import Pool

def encrypt(i):
    return bin(i)[2:].zfill(10).decode('hex')

if __name__ == '__main__':
    pool = Pool(processes=4)  # adjust to number of cores
    result = pool.map(encrypt, range(1000))
    print result