我有一个python脚本,可以使一些数据库读写,计算某些内容-假设是computing.py。根据数据库条目的数量,这会花费很多时间,因此我认为可以通过多次执行脚本来加快速度。我已经阅读了一些有关python的多处理库的好文章,并认为那是我可以做到的方式(我也了解了线程)。 如果我将Calculation.py的代码包装在一个函数中,则可能是这样的:
from multiprocessing import Process
def calculate():
#do something
print("that's it")
if __name__ == '__main__':
p1 = Process(target=calculate)
p2 = Process(target=calculate)
p3 = Process(target=calculate)
p4 = Process(target=calculate)
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
print('all done')
我很好奇,将多个执行作为bash中的子流程来执行有什么区别,例如:
#!/bin/bash
python3 calculate.py &
python3 calculate.py &
python3 calculate.py &
python3 calculate.py &
我现在没有服务器设置,但是如果我有2个具有4个线程的CPU内核,我希望单次执行/calculation.py进程的速度将提高4倍。
这两种方式有何不同?从技术上讲,将多个执行作为子流程并使用多处理库,从技术上讲,这是更快,更高效的方式?