无限while循环内的多处理

时间:2017-09-25 07:54:57

标签: python json while-loop infinite-loop

我想使用多处理程序包从多个来源使用JSON读取数据。我也想无限期地这样做。

这是我的代码文本:

while True:
    time_start = datetime.datetime.now()
    f = open("data_logging_pv.csv", "ab")
    c = csv.writer(f)
    if __name__ == '__main__':
        p=Pool(6)
        output = p.map(getData, [2, 4, 5, 6, 7, 9])
        j = 0
        for i in [2, 4, 5, 6, 7, 9]:
            c.writerow([time_start, i, output[j][0], output[j][1], output[j][2], output[j][3], output[j][4]])
            j = j + 1;
        print(output)
        print("\nTemps d'execution:" +str(datetime.datetime.now()-time_start))
        f.close()
        p.terminate()

函数getData是JSON请求。

执行没有实现p.map,但是创建了进程。 我不知道如何调试它。

我对python有点生疏,并且使用过多处理,然后可能会有一些基本的'错误。

由于 马丁。

1 个答案:

答案 0 :(得分:0)

  1. 添加了KeyboardInterrupt处理程序,因此它不会将异常垃圾邮件发送到stdout
  2. 小优化的csv写作
  3. 仅初始化一次
  4. 不确定,你有这种错误,但这段代码在python2.7上正常工作:

    import csv
    import datetime
    import signal
    from multiprocessing.pool import Pool
    
    
    def getData(item):
        return [item, item + 1, item ** item, item * 2, 0]
    
    
    def worker():
        signal.signal(signal.SIGINT, signal.SIG_IGN)
    
    
    if __name__ == '__main__':
    
        time_start = datetime.datetime.now()
        file = open("data_logging_pv.csv", "ab")
        c = csv.writer(file)
        pool = Pool(6, initializer=worker)
    
        try:
    
            while True:
                output = pool.map(getData, [2, 4, 5, 6, 7, 9])
    
                for i, res in zip([2, 4, 5, 6, 7, 9], output):
                    c.writerow([str(datetime.datetime.now()), i] + res)
    
        except KeyboardInterrupt:
            exit()
        finally:
            pool.terminate()
            pool.join()
            print("\nTemps d'execution:" + str(datetime.datetime.now() - time_start))
            file.close()