2016-01-22 25 views
1

我寫我的應用程序來檢查性能時,在MongoDB選擇值。 計算器完成時間。返回的結果是隨機的,而不是在Python中的行( n)?

但我的應用程序顯示結果像隨機字符,而不是在行(\ n)。 我喜歡這個:the images show my console when run application

更新: 我改變了我的代碼。但這也不適合我。

import sys 
import os 
from pymongo import MongoClient 
import random 
import pymongo 
import time 
from datetime import datetime 
import multiprocessing 

def mongoSelectStatement(result_queue): 
    client = MongoClient('mongodb://localhost:27017') 
    db = client.random 

    cursor = db.random.find() 

    for document in cursor: 
     result_queue.put(document) 

def main(): 
    processes = [] 
    result_queue = multiprocessing.Queue() 
    startTime = datetime.now() 
    for i in range(100): 
     p = multiprocessing.Process(target=mongoSelectStatement, args=[result_queue]) 
     p.start() 
     processes.append(p) 

    print "Doi ket qua tra ve..." 

    result = result_queue.get() 

    for p in processes: 
     p.terminate() 
    endTime = datetime.now() 
    print "Kqua tra ve: ", result, ' trong thoi gian ', (endTime - startTime) 

if __name__ == '__main__': 
    main() 
+0

當多個進程寫入相同的輸出流時會發生什麼...... – Kendas

+0

如何避免它?我在使用'multiprocessing'時總是有問題 – Joe

回答

0

您的MultiProcessing方法發瘋了。在打印命令完成之前,另一個進程的打印命令開始打印輸出,導致垃圾值。要麼刪除多處理,按順序運行所有內容,要麼閱讀多處理映射或隊列,以跟蹤作業順序,從而按順序給出結果。 檢查這個forreference.

另一種方法是將所有輸出傳遞到隊列,等待所有作業完成執行,然後按順序打印結果。這樣更好,因爲你不需要編輯很多代碼。只需將值集附加到列表中,最後打印出來。唯一的區別是,在某個時候(當所有作業完成時)你會看到輸出

+0

我更新了我的問題。我必須使用多處理來比較結果。 – Joe

+0

@Joe使用多處理來執行操作。使用順序方法來顯示結果。否則,請查看我在答案中鏈接的隊列/地圖。這可能有幫助。 –

+0

謝謝你的回覆。我在更新的代碼中使用隊列。 – Joe

相關問題