Skip to main content
 首页 » 编程设计

Python 循环同步

2025年05月04日8davidwang456

我在循环中多次调用外部进程。给你一个伪代码:

for i in xrange(1, 100): 
    call external proc which inserts a row into a table 

这里的问题是,每当调用外部进程时,它都会在单独的线程中运行,这可能需要任意多的时间才能运行。所以,python 会继续执行。这会导致插入遇到行锁并阻止插入。

在以下限制条件下,等待进程完成的理想方式是什么:

  1. 我无法修改外部流程的工作方式。
  2. 我知道我可以,但我不想使用 hack,比如 thread.sleep
  3. 我无法修改任何数据库设置。

调用外部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 

请您参考如下方法:

根据 subprocess,您有多种选择文档:

  • 在运行 process = subprocess.Popen(...) 后调用 process.wait()
  • 使用 subprocess.call 而不是 Popen
  • 使用 subprocess.check_call 而不是 Popen