Пример отправки задачи асинхронно (спулинга) в функцию - PullRequest
0 голосов
/ 20 октября 2018

Я новичок в этой области и пытаюсь найти функцию, которая выполнит следующее:

  1. Считывание данных из базы данных Oracle с использованием больших кусков (50000 строк).
  2. Для каждого чтения чанка я хочу порождать поток или процесс или что-то подобное, что будет асинхронно буферизовать кусок данных (используя CVS_Writer) в файл.
  3. Я не хочузаблокировать задачу чтения данных, чтобы дождаться завершения операции буферизации.

Я посмотрел на что-то вроде ниже.Обновлен код с импортом и убрано использование очереди.Вместо этого передача данных напрямую в функцию печати. ​​

--------------------------------------------------------------

from __future__ import print_function

import cx_Oracle
import csv
import time
import datetime
from multiprocessing import Pool
from multiprocessing import Queue
def PrintRows(rows):
    rows=q.get()
    if not rows:
        return -1;
    csvf = open('sales_history.csv', 'a')
    csv_writer = csv.writer(csvf,delimiter='|')
    print ("In PrintRows function : ")
    csv_writer.writerows(rows)
    csvf.close()
    return 0

def TheMainQuery():
 conn = pool.acquire()
    cursor = conn.cursor()
    cursor.arraysize = 80000
    cursor.execute("""
         select *
            from
                sales_history
                """)
    rows = cursor.fetchmany()
    while rows:
        if not rows:
           break;
        q.put(rows)
        print("launching async proc")
        with Pool(processes=2) as ppool:         
           result = ppool.apply_async(PrintRows,(rows,))    
        print("Done launching async process")
        rows = cursor.fetchmany()

TheMainQuery()

elapsed_time = time.time() - start_time
print("All done!\n")
return
---------------------------------------------------------

Проблема: запись данных в файл вообще не производится.Af, если функция не выполняется вообще.Моя цель состоит в том, чтобы задание спулинга выполнялось асинхронно.Любые советы / образцы будут высоко оценены.

спасибо большое !!!.

...