Застрял с многопоточностью

я читаю несколько hdf5 файлов и эти hdf5 файлы будут иметь наборы данных в иерархии, я получаю данные из этих hdf5 файлов, я использую многопоточность внутри hdf5 файла для увеличения скорости чтения, также скажите как я могу сделать это быстро, мне нужно изменить структуру или способ чтения, я использую python 2.7 и django 1.8:

присутствует: их несколько client_id.hdf5 , внутри него несколько ship_ids -> report_types-> time_stamp-> в этих данных за это время

Я сделал это, он печатает только до получения данных. Запуск многопроцессорной обработки... ('Processing client:', 112):

Вместо использования подхода is_Alive, чтобы сделать его надежным и быстрым, вы можете переписать его с помощью фьючерсов

from concurrent.futures import ThreadPoolExecutor, as_completed

with ThreadPoolExecutor(max_workers=settings.WORKER_THREADS) as executor:
       future = executor.submit(client_file, queue)
       future_to_row[future] = row
for future in as_completed(future_to_row):
            future.result()

Создайте очередь и отправьте на обработку значения, отличные от None.

Вы можете эффективно создать свой собственный пул потоков, создав некоторое количество потоков (назовем его NTHREADS) и сохраняя их в списке.

Когда поток потребляет None из очереди, это воспринимается как признак того, что поток должен прекратить обработку.

Что-то вроде этого:

from queue import Queue
from threading import Thread, Lock

NTHREADS = 4

def pthread(q, k):
    # use a blocking get()
    while (value := q.get()) is not None:
        # acquire exclusive access to stdout
        with k:
            print(value)

if __name__ == "__main__":
    q = Queue()
    k = Lock()
    # create a "pool" of NTHREADS threads
    threads = [Thread(target=pthread, args=(q, k)) for _ in range(NTHREADS)]
    # start the threads
    for thread in threads:
        thread.start()
    # put some values on the queue
    for x in range(10):
        q.put(x)
    # send None NTHREADS times to the queue
    # when a thread consumes None from the queue, it terminates
    for _ in range(NTHREADS):
        q.put(None)
    # wait for the threads to terminate
    for thread in threads:
        thread.join()

Возможный выход:

0
2
3
4
5
6
7
8
9
1
Вернуться на верх