【问题标题】:Returned results are random and not down the line (\n) in python?返回的结果是随机的,而不是在 python 中的行 (\n)?
【发布时间】:2016-01-22 08:50:08
【问题描述】:

我编写应用程序来检查在MongoDB 中选择值时的性能。 并计算完成时的时间。

但我的应用程序显示的结果类似于随机字符,而不是下线 (\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()

【问题讨论】:

  • 当多个进程写入同一个输出流时会发生这种情况...
  • 如何避免?我在使用multiprocessing时总是遇到问题

标签: python mongodb


【解决方案1】:

您的多处理方法快疯了。在打印命令完成之前,另一个进程的打印命令开始打印输出,从而产生垃圾值。要么删除多处理,按顺序运行所有内容,要么阅读多处理映射或队列,以跟踪作业顺序,从而按顺序给出结果。 检查这个forreference.

另一种方法是将所有输出传递给队列,等待所有作业完成执行,然后按顺序打印结果。这更好,因为您不必编辑大量代码。只需将值集附加到列表中,最后打印。唯一的区别是,您会在某个时间后看到输出(当所有作业完成时)

【讨论】:

  • 我更新了我的问题。我必须使用多处理来比较结果。
  • @Joe 使用 Multiprocessing 执行操作。,使用顺序方法仅显示结果。否则,请查看我在答案中链接的队列/地图。这可能会有所帮助。
  • 感谢您的回复。我在更新的代码中使用了队列。
猜你喜欢
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
相关资源
最近更新 更多