【问题标题】:Data not printing correct数据打印不正确
【发布时间】:2015-01-09 12:32:41
【问题描述】:

当针对多处理运行数据流子进程时,在字典程序中打印单个元素后冻结,

#!/usr/bin/python

import subprocess,time, timeit
from multiprocessing import Process, Queue
import re, os, pprint, math
from collections import defaultdict

Dict = {}
count = defaultdict(int)
queueVar = Queue()

def __ReadRX__(RX_info):
    lines = iter(RX_info.stdout.readline, "")
    try:
        start = time.clock()
        for line in lines:
            if re.match(r"^\d+.*$",line):
                splitline = line.split()
                del splitline[1:4]
                identifier = splitline[1]
                count[identifier] += 1
                end = time.clock()
                timing = round((end - start) * 10000, 100)
                dlc = splitline[2]
                hexbits = splitline[3:]
                Dict[identifier] = [dlc, hexbits, count[identifier],int(timing)]
                start = end 
                for identifier,hexbits in Dict.items():
                    queueVar.put(Dict)

    except KeyboardInterrupt:
        pass

procRX = subprocess.Popen('receivetest -f=/dev/pcan32'.split(), stdout=subprocess.PIPE)

if __name__ == '__main__':
    munchCan = Process(target=__ReadRX__, args=(procRX,))
    munchCan.start()
    #munchCan.join()
    printDict = queueVar.get()
    for i in range(len(printDict)):
        print printDict

我知道如果我从 __ReadRX__ 打印,它会打印一个恒定流,但是当我尝试从函数外部打印时,我只会在字典中得到一个条目。

【问题讨论】:

  • 也许我误解了一些东西,但我只看到一行打印任何东西,并且没有循环使它运行超过一次。
  • @jimmy,谢谢指出,我已经为打印添加了一个循环,但这仍然只打印一个,它应该打印字典中的每个条目,理论上应该永远持续跨度>
  • 尝试在每次打印之间添加一个短暂的睡眠,否则您的第二个线程将永远没有时间运行。

标签: python linux dictionary subprocess python-multiprocessing


【解决方案1】:

在顶部添加以下内容:

from time import sleep

然后在打印语句后添加:

sleep(1)

这将使脚本等待 1 秒。您可以根据需要调整该数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多