這裏是一個類似的例子中,使用多代替多線程(用於文檔,請參閱the official docs)。多線程處理與多線程非常相似,但它繞過了全局解釋器鎖定,因此允許您的腳本實際上同時運行不同的進程,並有可能更好地利用有限的計算資源。
進口多爲MP
def my_function(*args):
print("Arguments: {0}".format(args))
class MyProcess(mp.Process):
def __init__(self, target, args):
mp.Process.__init__(self, target=target, args=args)
def main():
a1 = MyProcess(target=my_function, args=("1st Process...",))
a2 = MyProcess(target=my_function, args=("2nd Process...",))
a3 = MyProcess(target=my_function, args=("3rd Process...",))
a4 = MyProcess(target=my_function, args=("4th Process...",))
proclist = [a1, a2, a3, a4]
for proc in proclist:
proc.start()
for proc in proclist:
proc.join()
if __name__ == '__main__':
main()
輸出:
Arguments: ('1st Process...',)
Arguments: ('2nd Process...',)
Arguments: ('3rd Process...',)
Arguments: ('4th Process...',)
雖然這些排在什麼似乎是一組指令,如果添加需要非確定性時間的任務,他們會按照他們完成的順序進來。只需用您的代碼替換my_function
的內容,即可設置。 (注意:這是使用Python 2.在Python 3中,修改很少 - 也許沒有修改 - 但是如果你使用Python 3,你也應該調查concurrent.futures
)。
您可以多次運行monitor.py,或者可以使其成爲多線程,或者甚至可以派生多個子項。 – 2016-05-12 07:45:15
多線程將是最好的這種情況下 –