如何在 Python 中使用 concurrent.futures
How to use concurrent.futures in Python
我正在努力让多线程在 Python 中工作。我有一个函数,我想根据一个参数在 5 个线程上执行。我还需要 2 个对每个线程都相同的参数。这就是我所拥有的:
from concurrent.futures import ThreadPoolExecutor
def do_something_parallel(sameValue1, sameValue2, differentValue):
print(str(sameValue1)) #same everytime
print(str(sameValue2)) #same everytime
print(str(differentValue)) #different
main():
differentValues = ["1000ms", "100ms", "10ms", "20ms", "50ms"]
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(do_something_parallel, sameValue1, sameValue2, differentValue) for differentValue in differentValues]
但是我不知道接下来要做什么
如果您不在乎顺序,您现在可以这样做:
from concurrent.futures import as_completed
# The rest of your code here
for f in as_completed(futures):
# Do what you want with f.result(), for example:
print(f.result())
否则,如果您关心顺序,使用 ThreadPoolExecutor.map
和 functools.partial
来填充始终相同的参数可能是有意义的:
from functools import partial
# The rest of your code...
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(
partial(do_something_parallel, sameValue1, sameValue2),
differentValues
))
我正在努力让多线程在 Python 中工作。我有一个函数,我想根据一个参数在 5 个线程上执行。我还需要 2 个对每个线程都相同的参数。这就是我所拥有的:
from concurrent.futures import ThreadPoolExecutor
def do_something_parallel(sameValue1, sameValue2, differentValue):
print(str(sameValue1)) #same everytime
print(str(sameValue2)) #same everytime
print(str(differentValue)) #different
main():
differentValues = ["1000ms", "100ms", "10ms", "20ms", "50ms"]
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(do_something_parallel, sameValue1, sameValue2, differentValue) for differentValue in differentValues]
但是我不知道接下来要做什么
如果您不在乎顺序,您现在可以这样做:
from concurrent.futures import as_completed
# The rest of your code here
for f in as_completed(futures):
# Do what you want with f.result(), for example:
print(f.result())
否则,如果您关心顺序,使用 ThreadPoolExecutor.map
和 functools.partial
来填充始终相同的参数可能是有意义的:
from functools import partial
# The rest of your code...
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(
partial(do_something_parallel, sameValue1, sameValue2),
differentValues
))