Python 3.x Python3 concurrent.futures-并行处理循环
如果我正确理解了Python 3中的Python 3.x Python3 concurrent.futures-并行处理循环,python-3.x,concurrent.futures,Python 3.x,Concurrent.futures,如果我正确理解了Python 3中的concurrent.futures模块的工作原理,下面的代码: import concurrent.futures import threading # Simple function returning a value def test(i): a = 'Hello World\n' return a def main(): output1 = list() with concurrent.futures.Thre
concurrent.futures
模块的工作原理,下面的代码:
import concurrent.futures
import threading
# Simple function returning a value
def test(i):
a = 'Hello World\n'
return a
def main():
output1 = list()
with concurrent.futures.ThreadPoolExecutor() as executor:
# psdd iterator to test function
for out1 in executor.map(test, range(0, 10)):
# append returned result
output1.append(out1)
# confirm output
print(output1)
print("Task Executed {}".format(threading.current_thread()))
if __name__ == '__main__':
main()
…执行以下功能:
test()
的函数main()
函数中并行处理循环,如下所示:
import concurrent.futures
import threading
def main():
output1 = list()
with concurrent.futures.ThreadPoolExecutor() as executor:
# psdd iterator to test function
for out1 in executor.submit(range(0, 10)):
a = 'Hello World\n'
# append returned result
output1.append(a)
# confirm output
print(output1)
print("Task Executed {}".format(threading.current_thread()))
if __name__ == '__main__':
main()
…但是,这会产生以下错误:
Traceback (most recent call last):
File "G:\HTPC Scripts\WebGrab Plus\TESTTESTTEST2.py", line 221, in <module>
main()
File "G:\HTPC Scripts\WebGrab Plus\TESTTESTTEST2.py", line 209, in main
for out1 in executor.submit(range(0, 10)):
TypeError: 'Future' object is not iterable
回溯(最近一次呼叫最后一次):
文件“G:\HTPC Scripts\WebGrab Plus\test2.py”,第221行,在
main()
文件“G:\HTPC Scripts\WebGrab Plus\test2.py”,第209行,在main中
对于executor.submit中的out1(范围(0,10)):
TypeError:“Future”对象不可编辑
我需要在代码中修改什么
谢谢无论您是使用
submit
还是map
,都必须始终使用可调用(如函数)作为第一个参数
Python确实允许嵌套函数(还要注意使用Futures
)的方法
定义可就地调用的唯一方法是使用
lambda
表达式,但这些表达式有很大的局限性。我真正想要的是在中并行处理循环,这是什么意思?你能解释更多吗?嗨-所以我不想从0开始,然后依次执行0、1、2、3、4等循环,这样在任何时候都只有一个循环是“活动”的,我希望在不同的线程上同时运行0到10个循环。这有意义吗?嗯executor.map
已经将函数test
同时应用于iterable中的每个元素。仍然不清楚..'但是,我真正想要的是在我的main()函数中并行处理循环,因此:'-对此有什么不清楚的?我不是问测试是否同时通过一个循环。我已经知道它是什么了……为了清楚起见,我要说的是:我不希望在test()中处理并发iterable,我希望在main()中直接处理一个。我该怎么做?任何其他意见/陈述/问题都是对这一点的转移。正如通常在SO上以被动攻击的方式所述,这不是一个代码编写服务。我有一个非常具体的问题需要帮助。。。。
import concurrent.futures
def main():
def worker(arg):
return str(arg) + ' Hello World!'
with concurrent.futures.ThreadPoolExecutor() as e:
fut = [e.submit(worker, i) for i in range(10)]
for r in concurrent.futures.as_completed(fut):
print(r.result())
if __name__ == '__main__':
main()