示例#1
0
for i in A.map(function_name, kwargs_list):
    print(i.result())
future = A.submit(function_name, (kwargs))
future.result()
future.done()
future.cancel()
task = [A.submit(function_name, (kwargs)) for i in range(20)]
wait(task, return_when=FIRST_COMPLETED)
for i in as_completed(task):
    print("result:", i.result())
A = Semaphore(20)
B = A.acquire()
B.release()
A = Condition()
A.acquire()
A.wait()
A.notify()
A.release()


async def hello(name):
    print('hello to :', name)
    return "BBBB"


#获取了一个协程对象
c = hello('bobo')
#创建一个事件循环对象
loop = asyncio.get_event_loop()
#就协程进行进一步的封装,封装到了task对象中
task = [loop.create_future(c) for i in range(100)]
示例#2
0
def run_cmd(cmd: Union[str, list],
            fetch_console=False,
            workdir: Optional[str] = None,
            stdout: Optional[Union[str, IO]] = None,
            stderr: Optional[Union[str, IO]] = None):
    """
    新开一个进程执行传入的命令
    如果fetch_console为True,则可返回命令的标准输出。
    如果fetch_console为False, 执行的命令会直接输出到控制台。

    :param cmd: 命令行或者命令行列表
    :param fetch_console:是否获取命令行输出
    :param workdir:是否获取命令行输出
    :param stdout:是否获取命令行输出
    :param stderr:是否获取命令行输出
    :return: 如果指定了fetch_console则返回命令行的标准输出,或者多个命令的标准输出列表,否则返回None
    """
    if cmd is None:
        return None
    if workdir is None:
        workdir = os.curdir
    if stdout is None:
        stdout = sys.stdout
    if stderr is None:
        stderr = sys.stderr

    if isinstance(cmd, list):
        assert len(cmd) != 0
        p = ThreadPoolExecutor(len(cmd))
        all_task = [
            p.submit(run_cmd, c, fetch_console, workdir, stdout, stderr)
            for c in cmd
        ]
        return [future.result() for future in as_completed(all_task)]
    else:
        # backup
        cur = os.getcwd()
        os.chdir(workdir)
        if isinstance(stdout, str):
            stdout = open(stdout, "w+")
        if isinstance(stderr, str):
            stderr = open(stderr, "w+")
        if fetch_console:
            stdout = os.popen(cmd).read().strip()
            os.chdir(cur)
            return stdout
        else:
            if workdir is not None:
                try:
                    p = sp.Popen(cmd, shell=True, stdout=stdout, stderr=stderr)
                    p.wait()
                    success = True
                except KeyboardInterrupt as e:
                    raise e
                except OSError or TimeoutError:
                    success = False
            # Never occur
            else:
                success = os.system(cmd) == 0
            os.chdir(cur)
            return success