并行编程 - Python
Parallel Programming - Python
我最近听说了一些关于并行编程的事情,我基本上对此一无所知,但会继续阅读。但是作为开始,是否可以 运行 例如这个代码:
for i in range(1000):
print('Process1:', i)
for j in range(1000):
print('Process2:', j)
并行?这个案例只是一个玩具示例,但它有助于理解并行编程的“潜力”。
并且,如果该代码可以 运行 并行,它是否会以下列方式并行打印两个循环的输出:
进程 1: 0
进程 2:0
进程 1: 1
.
.
.
或者什么?
简答是肯定的,输出的外观取决于您使用的方法。
例如,如果你想使用 concurrent.futures,你可以在函数内部执行时打印输出,顺序将被打乱。
如果您想要访问 return 值,您可以选择是否要在它们完成时访问它们,以它们恰好完成的顺序为准,或者您可以使用“map”函数以预期的方式检索它们订单。
import concurrent.futures
def test_function(arguments: tuple):
test_value, function = arguments
"""Print the test value 1000 times"""
for i in range(0, 1000):
print(f"Function {function}, {test_value}, iteration {i}")
return test_value
def main():
"""Main function"""
# Context manager for parallel tasks
with concurrent.futures.ThreadPoolExecutor() as executor:
# Submit example. Executes the function calls asynchronously
result = [executor.submit(test_function, (i, "submit")) for i in range(1, 21)]
# Map example.
# Takes an iterable as argument that will execute the function once for each item
result_2 = executor.map(test_function, [(i, "map") for i in range(1, 21)])
for future in concurrent.futures.as_completed(result):
print(f"Submit: Process {future.result()} completed")
for future in result_2:
print(f"Map: Process {future} completed")
if __name__ == '__main__':
main()
由于你是初学者,下面的线程也一样:
(请注意,输出不受任何方式控制,可能会混淆!)
import threading
def f1():
for i in range(1000):
print('Process1:', i)
def f2():
for j in range(1000):
print('Process2:', j)
t1=threading.Thread(target=f1)
t2=threading.Thread(target=f2)
t1.start()
t2.start()
我最近听说了一些关于并行编程的事情,我基本上对此一无所知,但会继续阅读。但是作为开始,是否可以 运行 例如这个代码:
for i in range(1000):
print('Process1:', i)
for j in range(1000):
print('Process2:', j)
并行?这个案例只是一个玩具示例,但它有助于理解并行编程的“潜力”。
并且,如果该代码可以 运行 并行,它是否会以下列方式并行打印两个循环的输出:
进程 1: 0
进程 2:0
进程 1: 1
.
.
.
或者什么?
简答是肯定的,输出的外观取决于您使用的方法。 例如,如果你想使用 concurrent.futures,你可以在函数内部执行时打印输出,顺序将被打乱。 如果您想要访问 return 值,您可以选择是否要在它们完成时访问它们,以它们恰好完成的顺序为准,或者您可以使用“map”函数以预期的方式检索它们订单。
import concurrent.futures
def test_function(arguments: tuple):
test_value, function = arguments
"""Print the test value 1000 times"""
for i in range(0, 1000):
print(f"Function {function}, {test_value}, iteration {i}")
return test_value
def main():
"""Main function"""
# Context manager for parallel tasks
with concurrent.futures.ThreadPoolExecutor() as executor:
# Submit example. Executes the function calls asynchronously
result = [executor.submit(test_function, (i, "submit")) for i in range(1, 21)]
# Map example.
# Takes an iterable as argument that will execute the function once for each item
result_2 = executor.map(test_function, [(i, "map") for i in range(1, 21)])
for future in concurrent.futures.as_completed(result):
print(f"Submit: Process {future.result()} completed")
for future in result_2:
print(f"Map: Process {future} completed")
if __name__ == '__main__':
main()
由于你是初学者,下面的线程也一样: (请注意,输出不受任何方式控制,可能会混淆!)
import threading
def f1():
for i in range(1000):
print('Process1:', i)
def f2():
for j in range(1000):
print('Process2:', j)
t1=threading.Thread(target=f1)
t2=threading.Thread(target=f2)
t1.start()
t2.start()