我有一个包含表名的列表,并且假设列表的大小为n。现在我有n台服务器,因此我打开了n个与每个列表相对应的游标,它们也位于另一个列表中。现在,对于每个表,我想调用某个将参数作为这两个列表的函数。
templst = [T1,T2,T3,T4,T5]
curlst = [cur1,cur2,cur3,cur4,cur5]
for x in range(len(templst)):
for y in range(len(curlst)):
if( x == y):
print "extracting of table ",templst[x]
extract_single(curlst[y], tempst[x]);
我认为以上代码不会并行运行,或者不会同时启动每个游标。
我需要为对应的Ti的curi并行运行extract_single,在此示例中,i变为1到5。怎么做?如何进行并行处理的流程
您可以使用线程来完成这项工作
这只是一个例子:
from threading import Thread, Lock
class DatabaseWorker(Thread):
__lock = Lock()
def __init__(self, db, query, result_queue):
Thread.__init__(self)
self.db = db
self.query = query
self.result_queue = result_queue
def run(self):
result = None
logging.info("Connecting to database...")
try:
conn = connect(host=host, port=port, database=self.db)
curs = conn.cursor()
curs.execute(self.query)
result = curs
curs.close()
conn.close()
except Exception as e:
logging.error("Unable to access database %s" % str(e))
self.result_queue.append(result)
delay = 1
result_queue = []
worker1 = DatabaseWorker("db1", "select something from sometable",
result_queue)
worker2 = DatabaseWorker("db1", "select something from othertable",
result_queue)
worker1.start()
worker2.start()
# Wait for the job to be done
while len(result_queue) < 2:
sleep(delay)
job_done = True
worker1.join()
worker2.join()
您可以从这里阅读更多。
https://www.oracle.com/technical-resources/articles/embedded/vasiliev-python-concurrency.html