对启动一个可执行文件的多个副本的子进程的 lambda 函数调用

lambda function call to subprocess launching multiple copies of one executable

我多次启动一个可执行文件,第一次写出文件时除外。

""" Running hexlified codes from codefiles module prepared previously """

import tempfile
import subprocess
import os

import codefiles

if __name__ == '__main__':
    p = os.path.join(os.curdir, 'Tools')
    if not os.path.exists(p):
        os.makedirs(p)

    for fn, c in codefiles.exes:
        fnp = os.path.join(os.curdir, 'Tools', fn)
        if not os.path.exists(fnp):
            # for some reason hexlified code is sometimes odd length and one nibble
            if len(c) & 1:
                c += '0'
            c = c.decode('hex')
            with open(fnp, 'wb') as f:
                f.write(c)
        print fnp
        # this following line does not launch the second exe, but previous exe if exes existed
        # but first exe twice
        threading.Thread(target=lambda:subprocess.call([fnp])).start()

此处为开始后的屏幕截图(将 windows 从彼此移开后)。 notepad.exe 显示在印刷品中,但两个腻子开始了。

fnp 可能会在您的 lambda 执行时更改——您这里有一个竞争条件,因此,如果同时执行的 I/O 数量可以隐藏或显示竞争条件,因为 I/O 会减慢速度。

为避免竞争条件,将 lambda: 更改为 lambda fnp=fnp: 以在 创建 时绑定 fnplambda 而不是稍后 执行 .