在函数中异步提交(假脱机)任务的示例

时间:2018-10-20 06:53:52

标签: python asynchronous

我是该领域的新手,我正在尝试提出一个可以完成以下任务的功能:

  1. 使用大块(50000行)从Oracle DB读取数据。
  2. 对于每次读取的数据块,我都希望产生一个线程或进程或类似的东西,这些线程或进程或异步数据块(使用CVS_Writer)将其假脱机到文件中。
  3. 我不想阻止数据读取任务以等待假脱机操作基本完成。

我看过类似下面的内容。使用导入更新了代码,并删除了Queue的用法。而是直接将数据块传递给打印功能。

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

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
---------------------------------------------------------

问题:根本没有将数据写入文件。如果该功能根本没有执行。我的目标是使假脱机任务异步执行。 任何提示/示例都将受到高度赞赏。

非常感谢!!

0 个答案:

没有答案