使用下面我得到奇怪的輸出代碼:試圖瞭解多處理主要在python
import sys
from multiprocessing import Process
import time
from time import strftime
now =time.time()
print time.strftime("%Y%m%d %H:%M:%S", time.localtime(now))
fr= [1,2,3]
for row in fr:
print 3
print 1
def worker():
print 'worker line'
time.sleep(1)
sys.exit(1)
def main():
print 'start worker'
Process(target=worker, args=()).start()
print 'main line'
if __name__ == "__main__":
start_time = time.time()
main()
end_time = time.time()
duration = end_time - start_time
print "Duration: %s" % duration
輸出是:
20120324 20:35:53
3
3
3
1
start worker
main line
Duration: 0.0
20120324 20:35:53
3
3
3
1
worker line
我想我會得到這樣的:
20120324 20:35:53
3
3
3
1
start worker
worker line
main line
Duration: 1.0
這是爲什麼運行兩次?在WinX64使用Python 2.7:
20120324 20:35:53
3
3
3
1
worker line
但爲什麼似乎腳本運行兩次vs只有工人運行兩次?而不是打印1,如果我已經調用了模塊或其他腳本,該模塊/腳本是否也會運行兩次....我將如何控制啓動的進程數量。 – Merlin 2012-03-25 15:39:25
工作人員不是兩次運行,而是工作人員運行一次,「父」運行一次。所有的頂級代碼都是在執行'python myscript.py'時執行的,但是當腳本調用'multiprocessing.Process()',它執行'python -m multiprocessing.child'時,它會重新運行,轉而做一個'import myscript'。 – SingleNegationElimination 2012-03-25 15:49:54