Điều này có thể đã được hỏi trong một bối cảnh tương tự nhưng tôi không thể tìm thấy câu trả lời sau khoảng 20 phút tìm kiếm, vì vậy tôi sẽ hỏi.
Tôi đã viết một tập lệnh Python (giả sử: scriptA.py) và một tập lệnh (giả sử scriptB.py)
Trong scriptB tôi muốn gọi scriptA nhiều lần với các đối số khác nhau, mỗi lần mất khoảng một giờ để chạy, (đó là một kịch bản lớn, có rất nhiều thứ .. đừng lo lắng về điều đó) và tôi muốn có thể chạy scriptA với tất cả các đối số khác nhau cùng một lúc, nhưng tôi cần đợi cho đến khi TẤT CẢ chúng được thực hiện trước khi tiếp tục; mã của tôi:
import subprocess
#setup
do_setup()
#run scriptA
subprocess.call(scriptA + argumentsA)
subprocess.call(scriptA + argumentsB)
subprocess.call(scriptA + argumentsC)
#finish
do_finish()
Tôi muốn chạy tất cả subprocess.call()
cùng một lúc, và sau đó đợi cho đến khi chúng hoàn thành, tôi nên làm điều này như thế nào?
Tôi đã cố gắng sử dụng luồng như ví dụ ở đây :
from threading import Thread
import subprocess
def call_script(args)
subprocess.call(args)
#run scriptA
t1 = Thread(target=call_script, args=(scriptA + argumentsA))
t2 = Thread(target=call_script, args=(scriptA + argumentsB))
t3 = Thread(target=call_script, args=(scriptA + argumentsC))
t1.start()
t2.start()
t3.start()
Nhưng tôi không nghĩ rằng điều này là đúng.
Làm thế nào để tôi biết họ đã chạy xong trước khi đến nhà tôi do_finish()
?