我在一个循环中多次调用外部进程。给你一个伪代码:
for i in xrange(1, 100):
call external proc which inserts a row into a table
这里的问题是,每当调用外部进程时,它都会在单独的线程中运行,这可能需要任何时间来运行。因此,python 将继续执行。这会导致插入遇到行锁并阻止插入。
在以下限制条件下,等待该过程完成的理想方式是什么:
- 我无法修改外部流程的工作方式。
- 我知道我可以,但我不想使用 hack,比如 thread.sleep
- 我无法修改任何数据库设置。
调用外部proc的代码是:
def run_query(query, username, password):
try:
process = subprocess.Popen( "<path to exe> -u " + username + " -p "+ password +" " + query,
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE )
result, error = process.communicate()
if error != '':
_pretty_error('stderr', error)
except OSError, error:
_pretty_error('OSError', str(error))
return result