我无法理解为什么一个简单的执行器无法工作
我有两个模块:main.py
import other
a = [1, 2, 3]
b = ['a', 'b']
l = ['a', 'b', 'd']
other.run_executor(a, b, l)
other.py
from concurrent import futures
from multiprocessing import cpu_count
def do_stuff(a, b, c):
print(a, b, c)
def run_executor(a, b, l):
iterat = ((a, b, c) for c in l)
with futures.ThreadPoolExecutor(max_workers=cpu_count() - 1) as e:
e.map(do_stuff, iterat)
运行此代码不会引发任何错误,但也不会打印任何内容。 它打印a,b,l [0]; a,b,l [1]; a,b,l [2] 我做错了什么?
答案 0 :(得分:1)
这是因为您没有正确使用ThreadPoolExecutor.map
。参数不应作为一个迭代器传递,而应作为3个迭代器传递:
from concurrent import futures
from itertools import repeat
from multiprocessing import cpu_count
def do_stuff(a, b, c):
print(a, b, c)
def run_executor(a, b, l):
with futures.ThreadPoolExecutor(max_workers=cpu_count() - 1) as e:
e.map(do_stuff, repeat(a), repeat(b), c)
此外,您应该在主脚本中使用if __name__ == "__main__"
保护,以避免出现奇怪的行为。如果您尝试导入/拾取其中定义的函数,则允许保护模块主程序不被执行。
import other
if __name__ == "__main__":
a = [1, 2, 3]
b = ['a', 'b']
l = ['a', 'b', 'd']
other.run_executor(a, b, l)