2015-06-23 1 views
0

У меня есть 10 файлов CSV с миллионом записей. Я хочу прочитать 10 файлов параллельно, но с определенной скоростью (10 записей за 5 секунд). Каков эффективный способ сделать это? Я использую Windows, если кто-то предложит использовать планировщик ОСПрочитайте много файлов параллельно с определенной частотой дискретизации

+0

Это может быть только я, но я не уверен, какова ваша конечная цель. Похоже, вы пытаетесь объединить две задачи, которые не должны сочетаться. –

+0

Я хочу имитировать потоки данных. Все данные у меня есть во многих файлах. поэтому мне нужно выполнять одинаковые процессы для всех файлов параллельно, и эти файлы представляют разные типы данных. Например, у меня есть 10 типов данных A, B, C, .. в file1, file2, file3, ... Я хочу читать 10 записей из данных типа A каждые 5 секунд из файла 1 и то же самое для других файлов , – Yasmin

+0

Если речь идет о потоке данных, я бы предложил, чтобы какая-то другая программа (Python?) Просто записывала 10 записей/5 секунд. Каждая программа может писать в другой файловый дескриптор (если Windows поддерживает это) или создавать TCP-соединения в разных портах для каждой каждой программы для прослушивания и чтения потоков данных. – Evert

ответ

0
  1. Открыть 10 файлов.
  2. Прочтите 1 запись из каждого файла (или 10, вопрос непонятен).
  3. Используйте эти записи.
  4. Подождите, пока не истечет текущий 5-секундный интервал.
  5. Перейти к 2.
2

Я хотел бы попробовать joblib Вот некоторые непроверенные пример кода ...

from joblib import Parallel, delayed 
import time 

#make a function that takes ONE filename and processes it the way you want 
def process_csv(filename): 
    count = 0 
    #open file using method of choice plain file or csv 
    f = open(filename) 
    for line in f: 
     #do we ignore header? 
     if count == 0: 
      count += 1 
      continue 
     arr = line.strip().split(',')#use csv module if not simple text 
     #do something, store it, whatever 

     if count % 10 == 0: 
      time.sleep(5) 

    return 1 


if __name__ == '__main__': #windows-only protection 

    filenames = ['file1', 'file2', ..., 'file10'] 

    dummy = Parallel(n_jobs=10)(delayed(process_csv)(fn) for fn in filenames) 

сейчас, смотрите, если кто-то добавляет к этим файлам, как вы читаете их. Этот код, вероятно, не будет работать.

Смежные вопросы