我有一个简单的问题。本质上,我想同时或并行在列表列表上运行一个函数。
从本质上讲,这就是我正在使用的东西
def func(x):
print(x)
for objectList in space:
for subObject in objectList:
func(subObject)
理想情况下,我希望能够一次在每个func()
上运行objectList
。我知道(实际上我不知道,这就是为什么我问如何做到这一点),这是线程化或并行性,但这是我第一次尝试这样做。
我的问题是,是否存在以python或标准方式完成的模块或内置函数?
很抱歉,如果我以某种方式违反了该网站上的规则或某些内容,或者您认为这个问题很愚蠢,重复或其他问题。
答案 0 :(得分:1)
来自python文档:
Pool对象[...]提供了一种便利的方法,可以跨多个输入值并行执行函数,跨进程分配输入数据(数据并行性)
您可以使用此模式,该模式也来自docs:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
答案 1 :(得分:0)
正如其他人所指出的那样,使用线程和并行计算应该是有道理的,因为它还会要求您执行其他操作,例如输入/负载分配和管理工作程序(工作线程)。这些机制中肯定有内置的库。对于简单的应用程序,您可以只使用(threading.Thread)类。这是使用线程的简单示例。这段代码将为空间的每个元素创建工作程序。
import threading
def func(x):
print(x)
class FuncThread(threading.Thread):
def __init__(self, x):
threading.Thread.__init__(self)
self.x = x
def run(self):
#worker code = func(x)
print('doing stuff with:', self.x)
space = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
worker_handlers = list()
for objectList in space:
for subObject in objectList:
worker_handlers.append(FuncThread(subObject))
for worker in worker_handlers:
worker.start()
print('The main program continues to run in foreground.')
for worker in worker_handlers:
worker.join() # Wait for the background tasks to finish
print('Main program waited until background was done.')