Python并行处理词典翻译在单个文本文件中

Python并行处理词典翻译在单个文本文件中,python,multithreading,parallel-processing,multiprocessing,Python,Multithreading,Parallel Processing,Multiprocessing,我的气候传感器数据是从传感器集线器生成的,定期存储在文本文件中: {"Time":1541203508.45,"Tc":25.4,"Hp":33} {"Time":1541203508.45,"Tc":25.2,"Hp":32} {"Time":1541203508.45,"Tc":25.1,"Hp":31} {"Time":1541203508.45,"Tc":25.2,"Hp":33} 我在for循环中进行了大量列表查找(binning),如下所示: #generate sample da

我的气候传感器数据是从传感器集线器生成的,定期存储在文本文件中:

{"Time":1541203508.45,"Tc":25.4,"Hp":33}
{"Time":1541203508.45,"Tc":25.2,"Hp":32}
{"Time":1541203508.45,"Tc":25.1,"Hp":31}
{"Time":1541203508.45,"Tc":25.2,"Hp":33}
我在for循环中进行了大量列表查找(binning),如下所示:

#generate sample data
sensor_data={x:{"Time":15e6+x,"Tc":random.randint(20e3,50e3)/1000.0,"Hp":random.randint(0,100e3)/1000.0} for x in range(int(1e5))}

#process data
for i in sensor_data:
    #we'd normally do a json.loads(data_line) if reading from the file
    sensor_data[i]['H']=['V_Dry','Dry','Normal','Humid','V_Humid','ERR'][int(sensor_data[i]['Hp']//20)]
    sensor_data[i]['T']=['V_Cold','Cold','Normal','Hot','V_Hot','ERR'][int(sensor_data[i]['Tc']//10)]
    #.... And so on for other sensors etc
输入:

{0: {'Hp': 20.514, 'Tc': 43.92, 'Time': 15000000.0},
 1: {'Hp': 59.332, 'Tc': 35.592, 'Time': 15000001.0},
 2: {'Hp': 19.49, 'Tc': 25.813, 'Time': 15000002.0},
 3: {'Hp': 78.644, 'Tc': 48.07, 'Time': 15000003.0},
 4: {'Hp': 3.967, 'Tc': 35.058, 'Time': 15000004.0}}
输出:

{0: {'H': 'Dry', 'Hp': 20.514, 'T': 'V_Hot', 'Tc': 43.92, 'Time': 15000000.0},
 1: {'H': 'Normal', 'Hp': 59.332, 'T': 'Hot', 'Tc': 35.592, 'Time': 15000001.0},
 2: {'H': 'V_Dry', 'Hp': 19.49, 'T': 'Normal', 'Tc': 25.813, 'Time': 15000002.0},
 3: {'H': 'Humid', 'Hp': 78.644, 'T': 'V_Hot', 'Tc': 48.07, 'Time': 15000003.0},
 4: {'H': 'V_Dry', 'Hp': 3.967, 'T': 'Hot', 'Tc': 35.058, 'Time': 15000004.0}}
如何加快翻译速度? 我们通常需要从文件中读取100MB-1GB的数据文件

我已经尝试了一些方法:

我不会多进程读取文件,因为这会导致太多的抓取,我认为这是不正确的

我曾经尝试过使用一个将文本文件分割成块的函数来多处理数据行块,而多处理开销似乎太大了

我尝试了4个进程,每个进程使用一个队列,4个进程使用传递给进程的manager.list对象使用不同的队列

在每种情况下,只需在数据上运行简单的“for”循环,总体上都会更快。我该如何处理多进程/线程/任何其他比串行数据处理更快的事情

数据不必按任何顺序排列,因为我们有时间戳,可以用于以后排序。
我们有一个4核i7供我们使用。我们使用的ujson似乎更快。

如果要执行IO操作,则必须使用多线程而不是多处理。如果有CPU消耗操作,则必须使用多线程。因为您的操作是从文件中读取数据,所以必须使用多线程而不是多处理。 有关更多信息,请检查并回答