2016-11-29 4 views
0

sqlloaderセッションを開くためにthreadingモジュールを使用しましたが、うまくいきました。 asyncioモジュール(コルーチン)を使用して同じ程度の並列性を達成するのにトラブルがあります。Python/co-routineを使用して負荷をOracleに並列化することはできますか?

このコードは常にPythonの3.5に順次ロード:

import asyncio 

async def load_data(filename): 

     loadConf=('sqlldr SKIP=%s %s userid=%s DATA=%s control=%s LOG=%s.log BAD=%s.bad DISCARD=/dev/null' % (...)).split(' ') 

     p = Popen(loadConf, stdin=PIPE, stdout=PIPE, stderr=STDOUT, shell=False, env=os.environ) 
     output, err = p.communicate(pwd.encode()) 
     status=p.wait() 

async def main(): 
    await asyncio.wait([load_data(file1),load_data(file2)]) 


if __name__ == "__main__": 
    loop = asyncio.get_event_loop() 
    loop.run_until_complete(main()) 

答えて

1

はい、それは可能ですが、後者はイベントループについては何も知らないので、代わりにsubprocess.Popenasyncio.create_subprocess_shellを使用する必要がありますし、単に内部のブロック完了まであなたのload_dataHereが該当する例です。

+0

魅力的に働いた、ありがとう – olekb

関連する問題