使用multprocessing lib和使用&-operator在bash中执行python脚本的区别

时间:2018-10-05 13:27:50

标签: python linux bash multiprocessing python-multiprocessing

我有一个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倍。

这两种方式有何不同?从技术上讲,将多个执行作为子流程并使用多处理库,从技术上讲,这是更快,更高效的方式?

0 个答案:

没有答案