使用python线程

时间:2016-01-06 19:22:48

标签: python sql-server multithreading concurrency

我的存储过程非常慢(每次运行约30分钟),它会为传递的每个日期写入输出表。它唯一的参数是输入日期,它需要在一个范围内的每一天运行。使用游标或for循环导致没有加速,因为它是按顺序运行的,并且proc的每次运行必须等待前一个完成。

我曾尝试使用线程为范围内的每个日期执行proc,但我没有注意到我期望的加速。如果我做错了,或者有更普遍接受的方式来运行并发SQL,请告诉我。我希望由于一次执行需要30分钟,如果我同时运行程序,那么100个日期应该比一个日期需要的30分钟稍长一些,但绝对不是线性增加。

以下是代码的相关部分:

def query(table_name,prod_dt):
    cur.execute("exec {} '{}';".format(table_name,prod_dt))
    conn.commit()

def next_workday(start_date,end_date):
    start_date=datetime.strptime(start_date,'%Y-%m-%d')
    end_date=datetime.strptime(end_date,'%Y-%m-%d')
    yield datetime.strftime(start_date,'%Y-%m-%d')
    while start_date<end_date:
        start_date+=BDay(1)
        yield datetime.strftime(start_date+BDay(0),'%Y-%m-%d')

def main():
    ''' 
    change func call in line 1 to last_workday_of_month or next_workday
    depending on what you need, monthly vs daily business days
    '''
    for date in next_workday('2014-12-31','2015-03-31'):
        t1=Thread(target=query,args=('slow_proc',date))
        t1.start()
        t1.join()

0 个答案:

没有答案